圖片均來源於網絡
進程和線程的由來
- 串行:初期的計算機智能串行執行任務,並且需要長時間等待用戶輸入
- 批處理:預先將用戶的指令集中成清單,批量串行處理用戶指令,仍然無法併發執行
- 進程:進程獨佔內存空間,保存各自運行狀態,相互間不干擾可以互相切換,爲併發處理任務提供了可能
- 線程:共享進程的內存資源,相互間切換更快速,支持更細粒度的任務控制,使進程內的子任務得以併發執行
進程和線程的區別
- 進程是資源分配的最小單位,線程是CPU調度的最小單位
- 所有與進程相關的資源,都被記錄在PCB中
- 線程只由堆棧寄存器、程序計數器和TCB組成
- 總結:
- 線程不能看做獨立應用,而進程可看做獨立應用。
- 進程有獨立的地址空間,相互不影響,線程只是進程的不同執行路徑。
- 線程沒有獨立的地址空間,多進程的程序比多線程程序健壯
- 進程的切換比線程的切換開銷大
Java進程和線程的關係
- Java對操作系統提供的功能進行封裝,包括進程和線程
- 運行一個程序會產生一個進程,進程包含至少一個線程
- 每個進程對應一個JVM實例,多個線程共享JVM的堆
- Java採用單線程編程模型,程序會自動創建主線程
- 主線程可以創建子線程,原則上要後於子線程完成執行