国产精品免费嫩草研究院|无遮羞动漫在线观看AV|国产麻豆精品传媒AV国产在线|村在线观看|寂寞情人1正版|韩国床震韩国床震古|精品系列专区久久

一 Linux--多線程

線程線程的概念線程: 線程是OS能夠進行運算調度的基本單位 。線程是一個進程中的一個單一執行流 , 通俗地說 , 一個程序里的一個執行路線就叫做線程 。
可以知道的是 , 一個進程至少有一個執行線程 , 這個線程就是主執行流 。一個進程的多個執行流是共享進程地址空間內的資源 , 也就是說進程的資源被合理分配給了每一個執行流 , 這些樣就形成了線程執行流 。所以說線程在進程內部運行 , 本質是在進程地址空間內運行 。需要注意的是 , Linux下沒有真正意義上的線程 , 線程是通過進程來模擬實現的 。這句話如何理解?
Linux系統下 , 沒有專門為線程設計相關的數據結構 。那線程又是如何被創建的呢?我們知道 , 創建一個進程 , 我們需要為它創建相關的數據結構 , 如:PCB(task_struct)、mm_sturct、頁表和file_struct等 。線程的創建和進程的創建是一樣的 , 線程也是創建一個一個的PCB , 因為線程是共享進程地址空間的 , 所以這些線程都維護同一個進程地址空間 。
這樣可以看出一個線程就是一個執行流 , 每一個線程有一個task_struct的結構體 , 和進程一樣 , 這些task_struct都是由OS進行調度 ??梢钥闯鲈贑PU看來 , 進程和線程是沒有區別的 , 所以說Linux下的線程是通過進程模擬實現的 。

一 Linux--多線程

文章插圖
繼續思考 , CPU如何區分Linux下的線程和進程?
其實CPU不需要考慮這個問題 , 在它眼中 , 進程和線程是沒有區別的 , 都是一個一個的task_struct , CPU只管負責調度即可 。
那如何理解我們之前所學的進程?
我們都知道 , 進程是承擔分配系統資源的基本實體 , 曾經CPU看到的PCB是一個完整的進程 , 也就是只有一個執行流的進程 ?,F在看到的PCB不一定是完整的進程 , 可能是一個進程的執行流總的一個分支 , 也就是多執行流進程 。所以說 , 現在CPU眼中 , 看到的PCB比傳統的進程更加輕量化了 。這種有多執行流的進程中的每一個執行流都可以看作是一個輕量級進程 。總結地說 , 線程是輕量級進程 。總結:
簡單點來說 , 每個線程都有自己的PCB , 只不過這些PCB都維護和共享這同一塊虛擬空間(進程的虛擬空間 , 也就是進程的PCB) , 但是線程的PCB更輕量級 , 操作系統分配資源的時候是以進程那塊PCB為分配資源的最小單位 , 所以給進程分配的資源 , 屬于該進程的線程們都共享 , 而線程是操作系統調度的最小單位 , 操作系統不會區分線程和進程 , 在操作系統眼里都是一個個PCB , CPU調度的時候只負責調用PCB就行了 。