1. 程式人生 > >《Java併發程式設計實戰》—— 第一章 簡介

《Java併發程式設計實戰》—— 第一章 簡介

早期計算機

每次只能執行一個程式

作業系統

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

促進程序出現的因素:

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

執行緒

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

和明確的同步機制

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

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