早期計算機

每次只能執行一個程式

作業系統

每次能執行多個程式,不同的程式都在單獨的程序中執行。
作業系統為各個獨立執行的程序分配各種資源,包括記憶體,檔案控制代碼以及安全證書等。
不同的程序之間可以通過一些粗粒度的通訊機制來交換資料,包括:套接字、訊號處理器、共享記憶體、訊號量以及檔案等。

促進程序出現的因素:

  • 資源利用率
  • 公平性
  • 便利性

執行緒

允許在同一個程序中同時存在多個程式控制流。
執行緒共享程序範圍內的資源,例如記憶體控制代碼和檔案控制代碼,但每個執行緒都有各自的程式計數器、棧以及區域性變數等。
——需要一種比在程序間共享資料粒度更細的資料共享機制和明確的同步機制

執行緒的優勢:提升資源利用率,提升系統吞吐率

執行緒帶來的風險:
安全性問題 “永遠不發生糟糕的事情”。如競態條件。
活躍性問題 “某件正確的事情最終會發生”。如死鎖、飢餓、活鎖。
效能問題 “正確的事情儘快發生”。在多執行緒程式中,當執行緒排程器臨時掛起活躍執行緒並轉而執行另一個執行緒時,就會頻繁地出現上下文切換操作,這種操作將帶來極大的開銷:儲存和恢復執行上下文,丟失區域性性,並且CPU時間將更多地花線上程排程而不是執行緒執行上。當執行緒共享資料時,必須使用同步機制,而這些機制往往會抑制某些編譯器優化,使記憶體快取區中的資料無效,以及增加共享記憶體匯流排的同步流量。