6.2.7 线程与进程的关键类似和差别
线程和进程有很多相似之处,也存在巨大的差别。线程和进程都有id、寄存器组、状态和优先级,而且都支持某种调度策略。与进程类似,线程也有一个环境来向操作系统描述实体,即进程上下文或线程上下文。上下文用来重新构建被抢占的进程或线程。尽管进程所需要的信息远多于线程所需要的信息,但它们的目的是相同的。
线程和子进程不需要额外的初始化或准备就能够共享父进程的资源。进程打开的资源对线程或子进程是立即可访问的。与内核实体类似,线程和子进程会竞争对处理器的使用。父进程对子进程或线程有一定的控制。父进程可以对子进程或线程进行如下操作:
取消
挂起
重新开始
改变优先级
线程或进程可以改变自身的属性和创建新的资源,但是它不能够访问属于其他进程的资源。
如同我们已经指出的那样,线程和进程之间最大的差别在于每个进程有自己的进程空间,而线程则包含在所属进程的地址空间内。这就是为何线程可以非常容易地共享资源,而且线程间通信如此简单的原因。子进程有自己的地址空间以及它的父进程的数据段的副本,所以当子进程改动它的数据时,不会影响父进程的数据。如果父进程同子进程期望共享数据,则需要创建一块共享内存区域。共享内存是进程间通信机制的一种类型,其中包含了管道以及先进先出(FIFO)调度策略。进程间通信机制用于在进程之间传递数据。
注意:
进程间通信将在第7章讨论。
尽管进程可以对它的子进程进行控制,对等线程却是处于相同的级别,无论是谁创建了它们。任意线程只要有权使用另一个对等线程的线程id,就能够对该线程进行取消、挂起、重新开始或改变优先级的操作。实际上,进程中的任意线程都可以通过取消主线程来删除进程,从而终止进程中的所有线程。对主线程的任何更改可能会影响进程中的所有线程。如果主线程的优先级发生了变化,则进程中继承该优先级的所有线程也都会发生变化。
表6-2汇总了线程与进程的关键类似和差别。
表6-2
|
线程与进程的类似< xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> |
线程与进程的差别 |
|
都有id、寄存器组、状态、
优先级和调度策略 |
线程共享创建它的进程的地址空间,
进程有自己的地址空间 |
|
都有用于为操作系统
描述实体的属性 |
线程能够对所属进程的数据段进行
直接访问;进程有着父进程的数
据段的自己的副本 |
|
都包含一个信息块 |
线程可以同所属进程的其他线程直
接通信;进程必须使用进程间通
信才能够和兄弟进程进行通信 |
|
都与父进程共享资源 |
线程几乎没有开销,
进程则有相当大的开销 |
|
都可作为与父进程独立的实体 |
创建新的线程很容易,创建新的
进程则需要复制父进程 |
|
创建者可以对线程或进程
进行一些控制 |
线程可以对相同进程的其他线程
进行相当大的控制,进程只能
够对子进程进行控制 |
(续表)
|
线程与进程的类似 |
线程与进程的差别 |
|
都可以改变它们的属性 |
对主线程的改动(取消、优先级改动等)
可能会影响到进程中其他线程的行为;
对父进程的改动不会影响到子进程 |
|
都可以创建新的资源 |
|
|
都不能够访问另一
个进程的资源 |
|