程序员

并行 VS 并发【转载】

2015-10-11  本文已影响234人  AQ王浩

在计算机发展初期,CPU的计算能力非常有限。计算资源稀缺而王贵。
最早的时候一个CPU只能同时运行一个任务,这简直让人无法忍受。

什么叫只能运行一个程序呢?

这就像大学上自习占座一样,一旦一本书、一张纸、一个包或一个活人
占有了那个桌子,其他人就再也没法用了,无论是在这个人出去上厕所,
踢球,你都不能去用那个桌子。如果胆大包天去偷着坐,这时候
就会有个神秘人突然拍拍你的肩膀告诉你“同学,这里有人”,这就是传说
中的“见鬼的故事”。故事里的作为就是CPU,无论当前任务在使用CPU进行计算,
还是在读写磁盘IO或者进行网络交互,Y都得占用CPU,黑客极客和各种无证
程序员都觉得,这不科学!

于是大家试图通过各种方式来改变这一现象。

首先出现的是多通道程序,程序员们很快写了一个监控程序,发现当前任务不用
CPU计算时,就唤醒其他等待CPU资源的程序,让CPU资源能够得到充分利用。但多通道
的问题是调度乏力,不分青红皂白和轻重缓急,不管是急诊还是普通门诊,该等还是得等。

第二个出场的是分时系统,分时系统是一种协作模式,每个程序运行一小段都得主动把CPU
让出来给其他程序,这样每个程序都有机会得到CPU的一小段时间。这是操作系统的监控
程序也完善了一些,能够处理相对复杂的请求。早期的Window和Mac
OS都是采用这种方式来调用程序的。但是分时系统的问题是,一旦某个程序死循环,系统就
没招了,只能干等着,就像死机一摸一样,程序员说这是不可能接受的。

第三个是多任务系统,程序员们让操作系统接管了所有的硬件资源,变得更加高级智能,
系统进程开始分级,有的是特权级别,有的是平民级别(你就知道,在计算机世界都TM是这个样子),
所有的应用程序以进程和线程方式运行,CPU的分配方式采用了抢占式,就是说操作系统可以强制把CPU
的资源分配给目前最需要的程序。程序员们成功了,几乎完美的控制了一切,并造成了很多任务都是
同时运行的假象,如果用两个字来形容的话,那就是“和谐”,目前OS
X,Unix,Linux,Windows都是采用这种方式进行任务管理的。

抢占式。现行进程在运行过程中,如果有重要或者紧迫的进程到达(其状态必须为就绪),则现运行
进程将被迫放弃处理机,系统将处理机立刻分配给新的到达的进程。

以上都是单核单CPU的情况,但无论线程间的切换多么快,这些都是并发,而不是并行。

单个CPU永远无法同时执行两个或以上的任务,但是允许任务同时存在。
所以,只有多核或多个CPU才可能发生并行,如果单核单CPU只能发生并发行为。

参考

MacTalk-人生元编程

上一篇 下一篇

猜你喜欢

热点阅读