程序與執行緒的區別與聯絡、程序與執行緒的通訊方式.md
阿新 • • 發佈:2018-12-14
一、為什麼引入程序?
程序是為了提高CPU的執行效率,減少因為程式等待帶來的CPU空轉以及其他計算機軟硬體資源的浪費而提出來的。
二、為什麼引入執行緒?
為了減少程序切換和建立的開銷,提高執行效率和節省資源 。
三、執行緒和程序的區別?
- 排程:執行緒是獨立排程的基本單位,程序是擁有資源的基本單位。在同一程序中,執行緒的切換不會引起程序的切換;在不同的程序中,進行執行緒切換,則會引起程序的切換。
- 擁有資源:程序是擁有資源的基本單位,執行緒不擁有資源,但執行緒可以共享器隸屬程序的系統資源。
- 併發性:程序可以併發執行,而且同一程序內的多個執行緒也可以併發執行,大大提高了系統的吞吐量。
- 系統開銷:建立和撤銷程序時,系統都要為之分配或回收資源,在程序切換時,涉及當前執行程序CPU環境的儲存以及新排程的程序CPU環境的設定;而執行緒切換時只需儲存和設定少量暫存器內容,因此開銷很小,另外,由於同一程序內的多個執行緒共享程序的地址空間,因此這些執行緒之間的同步與通訊比較容易實現,甚至無須作業系統的干預。
- 通訊方面:程序間通訊需要藉助作業系統,而執行緒間可以直接讀/寫程序資料段來進行通訊。
四、程序間通訊方式
- 管道( pipe )
- 有名管道 (named pipe)
- 訊號量( semophore )
- 訊息佇列( message queue )
- 訊號 ( signal )
- 套接字( socket )
五、執行緒間通訊方式
- 事件(Event);
- 訊號量(semaphore);
- 互斥量(mutex);
- 臨界區(Critical section)
六、什麼時候用程序?什麼時候用執行緒?
程序與執行緒的選擇取決以下幾點:
- 需要頻繁建立銷燬的優先使用執行緒;因為對程序來說建立和銷燬一個程序代價是很大的;
- 執行緒的切換速度快,所以在需要大量計算,切換頻繁時用執行緒,還有耗時的操作使用執行緒可提高應用程式的響應;
- 因為對CPU系統的效率使用上執行緒更佔優,所以可能要發展到多機分佈的用程序,多核分佈用執行緒;
- 並行操作時使用執行緒,如C/S架構的伺服器端併發執行緒響應使用者的請求;
- 需要更穩定安全時,適合選擇程序;需要速度時,選擇執行緒更好;
- I/O密集型和CPU密集型適合多執行緒。