|
Linux线程的定义 |
|
![]() |
|
|
|
线程是在共享内存空间中并发的多道执行路径,它们共享一个进程的资源,如文件描述和信号处理。在两个普通进程(非线程)间进行切换时,内核准备从一个进程的上下文切换到另一个进程的上下文要花费很大的开销。
这里上下文切换的主要任务是保存老进程CPU状态,并加载新进程的保存状态,用新进程的内存映像替换老进程的内存映像。线程允许进程在几个正在运行的任务之间进行切换,而不必执行前面提到的完整的上下文。
在Unix类系统中,曾经出现过一些不同线程标准,它们都支持可移植操作系统接口标准POSIX(Portable Operating System Interface Standard)。
POSIX 标准由IEEE制定,并由国际标准化组织接受为国际标准。POSIX 1003.1c是一个用于线程(在一个程序中当前被执行的代码段)的标准,以前是P1993.4或POSIX.4的一部分,这个标准已经在1995年被 IEEE通过,归入ISO/IEC 9945-1:1996。
本文介绍线程主要是针对POSIX线程,即Pthread,因为Linux 对它的支持最好。相对进程而言,线程是一个更加接近于执行体的概念,它可以与进程中的其它线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。在串行程序基础上引入线程和进程是为了提高程序的并发度,从而提高程序运行效率和响应时间。
也可以将线程和轻量级进程(LWP)视为等同,但其实在不同的系统/实现中有不同的解释。LWP更恰当的解释可能为一个虚拟CPU或内核的线程,它可以帮助用户态线程实现一些特殊的功能。Pthread是一种标准化模型,它用来把一个程序分成一组能够同时执行的任务。
那么在什么场合会使用Pthread呢?
◆在返回前阻塞的I/O任务能够使用一个线程处理,同时继续执行其它处理任务。
◆在有一个或多个任务受不确定性事件影响,比如网络通信的可获得性影响的场合,能够使用线程处理这些异步事件,同时继续执行正常的处理。
◆如果某些程序功能比其它的功能更重要,可以使用线程以保证所有功能都出现,但那些时间密集型的功能具有更高的优先级。
以上三点可以归纳为在检查程序中潜在的并行性时,也就是说找出能够同时执行任务时使用Pthread。上面介绍了Linux进程模型已经提供了执行多个进程的能力,可以进行并行或并发编程,但是,线程对多个任务的控制程度要更好,使用资源更少。因为一个单一的资源,如全局变量,可以由多个线程共享,而且,在拥有多个处理器的系统上多线程应用会由用多个进程实现的应用执行。
|
上一篇:Linux内核主要五个子系统详解 下一篇:Linux对超线程技术支持
![](/images/xg.gif) |
相关文档 |
|
![](/images/xg.gif) |
发表评论 |
|
|
|
|