并行 VS 并发【转载】

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

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

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

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

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

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

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

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

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

  • 并发
    Concurrency

    如果一个系统支持两个或多个动作(Action)同时存在,那就是一个并发的系统。

  • 并行
    Parallelism

    如果一个系统支持两个或多个动作同时执行,那就是一个并行系统。

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

参考

MacTalk-人生元编程

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • word直接复制来了,格式就不改了。至于这门课怎么复习,只要平时实验都认真完成、报告认真写,平时分都很高;考试的话...
    Jozhn阅读 10,167评论 0 8
  • 又来到了一个老生常谈的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢? 今天就这个问题开始,来谈谈操...
    tangsl阅读 9,629评论 0 23
  • 在服务器端程序开发领域,性能问题一直是备受关注的重点。业界有大量的框架、组件、类库都是以性能为卖点而广为人知。然而...
    零一间阅读 4,351评论 0 12
  • 常闻得,“上有天堂,下有苏杭”便偶生他想,欲探其一之风采。不曾想,倒诱发了心中久藏的文艺青年梦,更生发出择一城终老...
    泠汐月阅读 1,677评论 0 3
  • 作为新手妈妈,在育儿过程中,我总是特别容易被各种困扰包围。在不断的学习中,我渐渐发现,比起东看一点,西学一点这种摸...
    停停停云阅读 4,514评论 0 1