并發(fā)(Concurrently)和并行(Parallel)是兩個(gè)不同的概念。借用Go創(chuàng)始人Rob Pike的說(shuō)法,并發(fā)不是并行,并發(fā)更好。并發(fā)是一共要處理(deal with)很多事情,并行是一次可以做(do)多少事情。
舉個(gè)簡(jiǎn)單的例子,華羅庚泡茶,必須有燒水、洗杯子、拿茶葉等步驟?,F(xiàn)在我們想盡快做完這件事,也就是“一共要處理很多事情”,有很多方法可以實(shí)現(xiàn)并發(fā),例如請(qǐng)多個(gè)人同時(shí)做,這就是并行。并行是實(shí)現(xiàn)并發(fā)的一種方式,但不是唯一的方式。我們一個(gè)人也可以實(shí)現(xiàn)并發(fā),例如先燒水、然后不用等水燒開(kāi)就去洗杯子,所以通過(guò)調(diào)整程序運(yùn)行方式也可以實(shí)現(xiàn)并發(fā)。
如果還不理解,建議看Rob Pike題為Concurrency is not Parallelism的演講PPT和演講視頻。
我把演講的PPT截圖貼出來(lái)方便大家理解。
http://wiki.jikexueyuan.com/project/linux-process/images/concurrent1.png" alt="" /> http://wiki.jikexueyuan.com/project/linux-process/images/concurrent2.png" alt="" /> http://wiki.jikexueyuan.com/project/linux-process/images/concurrent3.png" alt="" /> http://wiki.jikexueyuan.com/project/linux-process/images/concurrent4.png" alt="" /> http://wiki.jikexueyuan.com/project/linux-process/images/concurrent5.png" alt="" /> http://wiki.jikexueyuan.com/project/linux-process/images/concurrent6.png" alt="" /> http://wiki.jikexueyuan.com/project/linux-process/images/concurrent7.png" alt="" /> http://wiki.jikexueyuan.com/project/linux-process/images/concurrent8.png" alt="" /> http://wiki.jikexueyuan.com/project/linux-process/images/concurrent9.png" alt="" /> http://wiki.jikexueyuan.com/project/linux-process/images/concurrent10.png" alt="" /> http://wiki.jikexueyuan.com/project/linux-process/images/concurrent11.png" alt="" /> http://wiki.jikexueyuan.com/project/linux-process/images/concurrent12.png" alt="" /> http://wiki.jikexueyuan.com/project/linux-process/images/concurrent13.png" alt="" />
總結(jié)一下,并行是實(shí)現(xiàn)并發(fā)的一種方式,在多核CPU的時(shí)代,并行是我們?cè)O(shè)計(jì)高效程序所要考慮的,那么進(jìn)程是不是越多越好呢?