1. 程式人生 > >程序與執行緒的區別與聯絡、程序與執行緒的通訊方式.md

程序與執行緒的區別與聯絡、程序與執行緒的通訊方式.md

一、為什麼引入程序?

程序是為了提高CPU的執行效率,減少因為程式等待帶來的CPU空轉以及其他計算機軟硬體資源的浪費而提出來的。

二、為什麼引入執行緒?

為了減少程序切換和建立的開銷,提高執行效率和節省資源 。

三、執行緒和程序的區別?

  1. 排程:執行緒是獨立排程的基本單位,程序是擁有資源的基本單位。在同一程序中,執行緒的切換不會引起程序的切換;在不同的程序中,進行執行緒切換,則會引起程序的切換。
  2. 擁有資源:程序是擁有資源的基本單位,執行緒不擁有資源,但執行緒可以共享器隸屬程序的系統資源。
  3. 併發性:程序可以併發執行,而且同一程序內的多個執行緒也可以併發執行,大大提高了系統的吞吐量。
  4. 系統開銷:建立和撤銷程序時,系統都要為之分配或回收資源,在程序切換時,涉及當前執行程序CPU環境的儲存以及新排程的程序CPU環境的設定;而執行緒切換時只需儲存和設定少量暫存器內容,因此開銷很小,另外,由於同一程序內的多個執行緒共享程序的地址空間,因此這些執行緒之間的同步與通訊比較容易實現,甚至無須作業系統的干預。
  5. 通訊方面:程序間通訊需要藉助作業系統,而執行緒間可以直接讀/寫程序資料段來進行通訊。

四、程序間通訊方式

  • 管道( pipe )
  • 有名管道 (named pipe)
  • 訊號量( semophore )
  • 訊息佇列( message queue )
  • 訊號 ( signal )
  • 套接字( socket )

五、執行緒間通訊方式

  • 事件(Event);
  • 訊號量(semaphore);
  • 互斥量(mutex);
  • 臨界區(Critical section)

六、什麼時候用程序?什麼時候用執行緒?

程序與執行緒的選擇取決以下幾點:

  1. 需要頻繁建立銷燬的優先使用執行緒;因為對程序來說建立和銷燬一個程序代價是很大的;
  2. 執行緒的切換速度快,所以在需要大量計算,切換頻繁時用執行緒,還有耗時的操作使用執行緒可提高應用程式的響應;
  3. 因為對CPU系統的效率使用上執行緒更佔優,所以可能要發展到多機分佈的用程序,多核分佈用執行緒;
  4. 並行操作時使用執行緒,如C/S架構的伺服器端併發執行緒響應使用者的請求;
  5. 需要更穩定安全時,適合選擇程序;需要速度時,選擇執行緒更好;
  6. I/O密集型和CPU密集型適合多執行緒。