打开电脑,我们可以一边听音乐,一边下载文件,一边浏览网页,三项工作可以同时进行。操作系统用三个应用程序完成这三项工作,每个应用程序都可以被看作一条连续的指令流,CPU一条一条地执行这些指令。然而在单核CPU的计算机中,一个时刻只能执行一条指令,如何实现三项工作同时进行呢?原来操作系统以“时间片轮转”的方式实现这一目标。操作系统以进程(Process)的方式运行应用程序,进程不但包括应用程序的指令流,也包括运行程序所需的内存、寄存器等资源。在本章中,你只需把进程理解为一条执行路线就行了。一般情况下,开启三个应用程序,系统里就创建了三个进程,就增加了三条执行路线。操作系统轮流执行每个进程,每个进程执行一小段时间。比如先执行几十毫秒播放音乐的进程,接着执行几十毫秒下载文件的进程,然后再执行几十毫秒浏览网页的进程,三个进程就这样循环往复,交替进行。因为交替时间很短(一般只有几十毫秒),人们根本感觉不到如此短暂的停顿,所以在表面上看来就像三个工作同时进行似的。因此进程在宏观上是并发进行的,在微观上是交替进行的。

现在我们考虑这样一个例子,一个网页里有一段Flash动画,还有一个等待用户输入的文本框。程序必须在播放动画的同时不停的检测有无用户输入,以便及时响应用户的操作。在最早期的操作系统中,我们需要编写一段非常复杂的代码来实现这一目标,现在由于有了多线程技术(Multi-threading),这类问题就变得很简单了,我们可以通过在一个进程中创建两个线程(Threading)来实现我们的目标。线程非常类似于进程,它相当于在一个进程中创建了若干条并行的路线,比如一个线程播放动画,一个线程检测用户输入,操作系统将自动以“时间片轮转”的方式交替执行这两个线程中的指令,这样我们的目标就实现了。

同一个进程中的所有线程共享进程的资源,所以它们之间的切换就比进程间的切换快的多,因此线程可以看作轻量级进程(Lightweight Process)。现代的操作系统都是多进程(Multi-process)的操作系统,每个进程中运行一个或多个线程,所以大多数时间操作系统中都有多个线程并发运行。操作系统中有专门的调度程序管理线程,它根据事先设计好的算法轮流执行每个线程。线程是操作系统进行CPU调度的基本单位,线程的调度是由操作系统自动完成的,无须程序员关心。程序员只需编写好线程即可,线程的轮转交由操作系统完成,因此实现起来非常简单。

近年来Intel和AMD等芯片厂商纷纷发布了多核心CPU,使得线程能够真正的实现同步执行,多线程技术从此翻开新的篇章。

posted on 2009-03-13 16:28  陈孝勇  阅读(570)  评论(0编辑  收藏  举报