background image

区别的:

  一个完整的进程拥有自己独立的内存空间和数据,但是同一个进程内的线程是共享内
存空间和数据的。一个进程对应着一段程序,它是由一些在同一个程序里面独立的同时的
运行的线程组成的。线程有时也被称为并行运行在程序里的轻量级进程,线程被称为是轻
量级进程是因为它的运行依赖与进程提供的上下文环境,并且使用的是进程的资源。

  在一个进程里,线程的调度有抢占式或者非抢占的模式。

  在抢占模式下,操作系统负责分配CPU时间给各个进程,一旦当前的进程使用完
分配给自己的CPU时间,操作系统将决定下一个占用CPU时间的是哪一个线程。因此
操作系统将定期的中断当前正在执行的线程,将CPU分配给在等待队列的下一个线程。
所以任何一个线程都不能独占CPU。每个线程占用CPU的时间取决于进程和操作系统。
进程分配给每个线程的时间很短,以至于我们感觉所有的线程是同时执行的。实际上,系统
运行每个进程的时间有 2 毫秒,然后调度其他的线程。它同时他维持着所有的线程和循环,

 

分配很少量的CPU时间给线程。 线程的的切换和调度是如此之快,以至于感觉是所有的
线程是同步执行的。

  调度是什么意思?调度意味着处理器存储着将要执行完CPU时间的进程的状态和将
来某个时间装载这个进程的状态而恢复其运行。然而这种方式也有不足之处,一个线程可
以在任何给定的时间中断另外一个线程的执行。假设一个线程正在向一个文件做写操作,
而另外一个线程中断其运行,

 

也向同一个文件做写操作。Windows 95/NT, UNIX 使用的就是

这种线程调度方式。

  在非抢占的调度模式下,每个线程可以需要CPU多少时间就占用CPU多少时间。
在这种调度方式下,

可能一个执行时间很长的线程使得其他所有需要CPU的线程 饿死 。

在处理机空闲,即该进程没有使用CPU时,系统可以允许其他的进程暂时使用CPU。
占用CPU的线程拥有对CPU的控制权,只有它自己主动释放CPU时,其他的线程
才可以使用CPU。一些 I/O 和 Windows 3。x 就是使用这种调度策略。
在有些操作系统里面,这两种调度策略都会用到。非抢占的调度策略在线程运行优先级一
般时用到,而对于高优先级的线程调度则多采用抢占式的调度策略。如果你不确定系统采
用的是那种调度策略,假设抢占的调度策略不可用是比较安全的。在设计应用程序的时候,
我们认为那些占用CPU时间比较多的线程在一定的间隔是会释放CPU的控制权的,
这时候系统会查看那些在等待队列里面的与当前运行的线程同一优先级或者更高的优先
级的线程,而让这些线程得以使用CPU。如果系统找到一个这样的线程,就立即暂停当
前执行的线程和激活满足条件的线程。如果没有找到同一优先级或更高级的线程,当前线
程还继续占有CPU。当正在执行的线程想释放CPU的控制权给一个低优先级的线程,
当前线程就转入睡眠状态而让低优先级的线程占有CPU。

  在多处理器系统,操作系统会将这些独立的线程分配给不同的处理器执行,这样将
会大大的加快程序的运行。线程执行的效率也会得到很大的提高,因为将线程的分时共享
单处理器变成了分布式的多处理器执行。这种多处理器在三维建模和图形处理是非常有用
的。