并发(concurrency)和并行(parallelism)都是常见的概念,并且很多时候并不容易进行区分,甚至被用作表达同样的概念。
网上最流行的解释,并发是一个人吃三个馒头;并行是三个人吃三个馒头。
这样理解简单概况了主要区别,但其实并不是太完整。
从对象的角度,并发是一种任务分配模式,指的是同一个处理器被调度处理不同的任务,这些任务往往都是同一性质的任务。例如浏览器打开多个页面,浏览器自身虽然是单进程的,但是它可以(一般都使用多线程方式)轮流打开页面,也可以打开一个页面一半后跑去打开另外一个页面,然后再回来。
而并行是一种运行的方式,指的是多个处理器同时处理若干个任务,这些任务往往是不同的任务。例如多核系统,一个核上正在处理视频渲染,另外一个核同时处理了网络收发包。强调同时性和多处理者。
从架构设计上看,使用并发主要是因为处理资源有限,而多个任务往往存在block情况(例如io block),可以通过适合的调度来隐藏任务的block,即降低响应延迟。
而并行则往往是因为处理资源比较多(多核),通过同时运行多个任务来充分利用资源,提高整体的吞吐量。现在的大数据运算平台如hadoop等就是典型的并行的概念。
因此,某些场合下,两者可以结合使用,以提高系统整体的性能。这是很考验架构师的地方。
并发这个概念出现的比较早,算是历史遗产,得益于 CPU 的高速,效果还不错。
ReplyDelete