【Java多線程與併發】——進程與線程聯繫與區別

進程

從狹義上來說:是一段程序的執行過程

從廣義上來說:進程是一個具有獨立功能的程序關於某個數據集的一次運行活動,它是操作系統動態執行的基本單元

線程

線程可以理解爲進程中獨立運行的子任務,作爲獨立運行和獨立調度的基本單位

區別和聯繫

進程的執行過程是線狀的, 儘管中間會發生中斷或暫停,但該進程所擁有的資源只爲該線狀執行過程服務。一旦發生進程上下文切換,這些資源都是要被保護起來的。這是進程宏觀上的執行過 程。而進程又可有單線程進程與多線程進程兩種。我們知道,進程有 一個進程控制塊 PCB ,相關程序段 和 該程序段對其進行操作的數據結構集 這三部分,單線程進程的執行過程在宏觀上是線性的,微觀上也只有單一的執行過程;而多線程進程在宏觀上的執行過程同樣爲線性的,但微觀上卻可以有多個執行 操作(線程),如不同代碼片段以及相關的數據結構集。線程的改變只代表了 CPU 執行過程的改變,而沒有發生進程所擁有的資源變化。除了 CPU 之外,計算機內的軟硬件資源的分配與線程無關,線程只能共享它所屬進程的資源。與進程控制表和 PCB 相似,每個線程也有自己的線程控制表 TCB ,而這個 TCB 中所保存的線程狀態信息則要比 PCB 表少得多,這些信息主要是相關指針用堆棧(系統棧和用戶棧),寄存器中的狀態數據。進程擁有一個完整的虛擬地址空間,不依賴於線程而獨立存在;反之,線程是進程的一部分,沒有自己的地址空間,與進程內的其他線程一起共享分配給該進程的所有資源

參考博客:http://www.cnblogs.com/reality-soul/p/6397021.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章