併發和並行性有什麼區別? 編程
示例被讚揚。 多線程
併發性:具備共享資源潛力的多個執行流 併發
例如:兩個線程爭用一個I / O端口。 spa
平行主義:將問題分紅多個類似的塊。 線程
例如:經過在文件的每半部分上運行兩個進程來解析大文件。 進程
併發是指兩個或多個任務能夠在重疊的時間段內啓動,運行和完成。 並不必定意味着它們都將同時運行。 例如,單核計算機上的多任務處理 。 資源
並行是指任務實際上在多核處理器上同時運行。 get
引用Sun的《 多線程編程指南》 : io
併發:至少有兩個線程在進行時存在的條件。 並行性的一種更通用的形式,能夠包括時間切片做爲虛擬並行性的一種形式。 配置
並行性:當至少兩個線程同時執行時出現的條件。
他們解決了不一樣的問題。 併發解決了CPU資源不足和任務繁多的問題。 所以,您能夠經過代碼建立線程或獨立的執行路徑,以便在稀缺資源上共享時間。 直到最近,因爲CPU的可用性,併發一直是討論的主要內容。
並行解決了如下問題:找到足夠多的任務和適當的任務(能夠正確拆分的任務),而後將其分配給大量CPU資源。 並行性固然一直存在,但因爲多核處理器很是便宜,所以它已經走在前列。
我喜歡Rob Pike的演講:併發不是並行(更好!) (幻燈片) (演講)
Rob一般會談論Go,而且一般會經過直觀的解釋來解決併發與並行性問題! 這是一個簡短的摘要:
任務:讓咱們燃燒一堆過期的語言手冊! 一次一個!
併發:任務有許多併發分解! 一個例子:
並行性:若是至少有兩個地鼠同時工做或不一樣時工做,則先前的配置會並行發生。
補充別人的話:
併發就像讓雜耍雜耍的人玩弄許多球。 無論看起來如何,魔術師一次只能抓/扔一個球。 並行性是多個雜耍者同時玩雜耍球。