併發簡史
- 操作系統爲各個獨立執行的進程分配各種資源,包括內存、文件句柄以及安全證書等。
- 併發出現的原因:資源利用率、公平性和便利性。
- 線程允許在同一個進程中同時存在多個程序控制流,共享進程範圍內的資源。
線程的優勢
- 發揮多處理器的強大能力:如果程序只有一個線程,最多同時只能在一個處理器上運行。
- 建模的簡單性:通過使用線程可以將複雜並且異步的工作流分解爲一組簡單並且同步的工作流。
- 異步事件的簡化處理:如果操作系統能更好地支持線程,需要使用非阻塞I/O的情況將變得更少。
- 響應更靈敏的用戶界面:可以將長時間運行的事件響應任務放在一個單獨的線程中運行,主事件線程就能及時地處理界面事件。
線程帶來的風險
- 安全性問題:在沒有充足同步的情況下,多個線程中的操作執行順序是不可預測的,必須對共享變量的訪問操作進行協同。
- 活躍性問題:當某個操作無法繼續執行下去時,就會發生活躍性問題,如線程A在等待線程B釋放其持有的資源,而線程B永遠都不釋放該資源,那麼線程A就會永久地等下去。
- 性能問題:線程總會帶來某種程度的運行時開銷,如頻繁的上下文切換操作和同步機制使內存緩存區中的數據無效。
線程無處不在
將在應用程序之外的線程中調用應用程序代碼的模塊:Timer、Servlet和JSP、遠程方法調用RMI、Swing和AWT。