並行於併發區別

一:並行與併發:
1.“並行”是指無論從微觀還是宏觀,二者都是一起執行的,就好像兩個人各拿一把鐵杴在挖坑,一小時後,每人一個大坑。
2.而“併發”在微觀上不是同時執行的,只是把時間分成若干段,使多個進程快速交替的執行,從宏觀外來看,好像是這些進程都在執行,這就好像兩個人用同一把鐵杴,輪流挖坑,一小時後,兩個人各挖一個小一點的坑,要想挖兩個大一點得坑,一定會用兩個小時。
3.從以上本質不難看出,“併發”執行,在多個進程存在資源衝突時,並沒有從根本提高執行效率。

1.posix中,併發的定義要求:延遲調用線程的函數不應該導致其它線程的無限期延遲;
2.併發操作之間科能相互交替,導致程序相互獨立的運行(一個程序不必等到另一個程序結束後運行),但是併發並不意味着操作同時執行。
3.並行的補充含義是指事情在相同的方向上同時進行(沒有交錯)。真正的並行只能在多處理器系統中存在,而併發可以在單處理器和多處理器系統中都存在。
併發能夠在單處理器系統中存在是因爲併發是並行的假象,並行要求程序能夠同時執行多個操作,而併發只是要求程序假裝同時執行多個操作(每個小時間片執行一個操作,多個操作輪流執行)。


1.在多處理器系統中,線程模式可以讓一個進程同時執行多個獨立的運算。一個運行在雙CPU上的計算密集型多線程程序幾乎可以獲得傳統的
單線程程序兩倍的性能。“幾乎兩倍”是基於以下的事實:創建額外的線程和執行線程間的同步會帶來額外的開銷。這種效果通常稱爲“可擴展性“。
2.“可擴展性“總是隨着CPU數量的增加而下降,因爲可能會有更多的鎖操作和內存衝突。
3.多處理器系統中的硬件必須提供同步訪問內存的機制。當每個處理器有自己的數據高速緩存時,其中的數據必須與其它處理器緩存的數據以及內存中的數據保持一致。

1.線程編程模式允許程序在等待如I/O之類的阻塞操作的時候繼續其它計算。這對網絡服務器和客戶端是有用的,也是C/S系統使用線程的主要原因。
當一個線程在等待費時的網絡I/O操作的時候,該線程被阻塞,而其它線程還可以獨立的運行。某些系統支持異步I/O操作,可以具有類似的好處,但
大部分UNIX類系統不提供異步I/O操作,而且異步操作通常比線程更復雜。
注:UNIX系統支持“非阻塞式I/O“:允許程序推遲I/O操作,知道它能夠不被中斷的完成該操作。而異步I/O:能在程序執行其它操作的同時繼續I/O。

二:多線程編程模型的優點:
1.在多處理器系統中提高開發程序的並行性。除並行性這一優點需要特殊硬件支持外(多CPU),其它優點對硬件不作要求。
2.在等待慢速外設I/O操作結束的同時,程序可以執行其它計算,爲程序的併發提供更有效,更自然的開發方式。
3.一種模塊化編程模型,能夠清晰的表達程序中獨立事件間的相互關係。

發佈了24 篇原創文章 · 獲贊 18 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章