任务,过程,和线程
在你很小的时候,你学习怎样一次完成一个工作,但到了成年,当然也许你已成为父母辈了,这时,你就必须学会如何在同一时间做多个工作。例如,你是否发现有多少次你在办公室里作弄过电话,E-MAIL 和客人?你也许正在办公室里和一个人在谈话,这时电话铃响了,谈话就被电话打断了。也许正在打电话时,你又来了新(重要的)E-MAIL,你必须中断你的电话。一旦处理完E-MAIL以后,你可以接着打电话或者继续和办公室里的人谈话。如果等的时间太长了,电话另一端的人可能会挂断电话,或者办公室里的人也许会生气离开。你必须决定如何花费你的时间和花在谁身上。
在上面的例子中,你就是在进行多任务处理。你决定如何花费你的时间和计算机对多任务进行时序安排类似。正如我们一天只有24小时,计算机的资源也是有限的。看起来好像你在同时打电话和处理E-MAIL,但事实上,每次你只能将注意力集中在一件事情上。实际上你是在不断变换注意力,只不过变换得足够快,就好像你在同时做多个工作一样。当计算机处理多任务时,它从一个程序到另一个程序的切换是非常快的,以至于使你认为,所有 的程序都在同时运行。
假如你有一个克隆(可能叫多莉)的话,你就能同时做两件事。对于有多个CPU的计算机,同时在每一个CPU上运行程序称为多重处理。有时,人们可替换使用多任务处理和多重处理两个概念,但是,你不能在没有多个处理器的计算机上进行多重处理。因此,如果你正在使用一台只有一个处理器的计算机,操作系统可以进行多任务处理,如果你正在使用一台有多个处理器的计算机,操作系统既能进行多任务处理又能进行多重处理。
在操作系统中,过程是一个逻辑上的任务。过程是在运行应用程序,启动某一系统服务,和在Windows NT中启动某一子系统时产生的。每一个过程都有自己的专用资源(例如自己的专用存储空间),只有拥有这个过程的应用程序才能访问这些资源。这意味着,如果你产生了一个程序,在程序中用到一些数据,并且你也没有建立任何形式的程序间数据共享机制或使用操作系统的程序间数据共享机制,那么就只有你的程序能访问这些数据。大多数Windows开发者都用COM对象简化程序间的通信。如果你用的是Windows NT并且想共享数据,你可以使用内存映像文件。但是这对于Geek Speak column来说技术性太强,所以让我们继续往下讲。
……