从很久之前在学校到现在我们编程的时候经常都有听说到 并发编程 ,偶尔也会听到说并行,但我们很多人其实都不太清除 并发 与 并行 具体的区别在哪;我们刚开始学习编程语言的时候我相信我们写的都是 串行程序 ,一步接着一步来,可以说这比 并发程序 更不容易出错,但在性能上要远不如 并发 ;还有一种并发具有很强容错性: 分布式程序 ,分布式程序也算是并发程序,还可以具有很强的容错性,可以分开部署;
并发与并行有着本质上的区别。
并发指程序在同一时间只能做一个操作,但是可以在不同的时间点()做多个操作;
如:人是一个多线程的物种,只有你一个人的时候你开启多线程“一边炒菜,一边玩iPad”,但其实在某一时间点,人只可以做一件事,当我们翻炒菜的时候不可能还在玩iPad,当我们在玩iPad的时候不可能还能够翻炒菜,只有我们不在翻炒的时候才能够玩iPad,只有我们放下手中的iPad的时候才能够翻炒,但从时间概念上看我们还是在边炒菜边玩iPad;这样炒出来的菜可能不好吃,哈哈,就如并发编程一样存在资源的竞争,这里竞争的资源是手、眼睛,在计算机里是CPU,处处存在危机,一不小心就烧焦了,哈哈!
并行指在同一个时间点可以做几个相同的操作或几个不相同的操作;
如:现在家有你和你女朋友两个人,这个时候就不用你炒菜了,在你女朋友炒菜的时候你就可以哔哩啪啦的玩iPad了,等你女朋友做好饭就你可以吃了(不是好男人);就如现在很多计算机中都有多个CPU,我们可以写出比并发性能更高可以同时跑在多个CPU上的程序,但前提是你要有条件(多个CPU的计算机);
并发不是并行,有时候并行也是并发,有时候只是并行不是并发;只有当并行从整体上看是多个任务时才也是并发,但并行只是一个任务的时候那只是并行;
这个系列说的只是编程中的 并发模型 ,可能有时候也会谈到并行,但重点是并发模型;
这系列文章主要将会谈论到这么几个并发模型:线程与锁模型、Actor模型、Go的CSP模型等;