linux程序和執行緒的clone 建立。和執行緒排程

2021-09-01 14:05:01 字數 824 閱讀 7990

[b]linux下程序和執行緒的建立都是通過clone實現的. clone函式功能強大,帶了眾多引數,

clone可以讓你有選擇性的繼承父程序的資源,你可以選擇想vfork一樣和父程序

共享乙個虛存空間,從而創造的是執行緒,你也可以不和父程序共享,你甚至可以選

擇創造出來的程序和父程序不再是父子關係,而是 兄弟關係[/b]

pthread_create是基於clone實現的, 建立出來的其實是程序, 但這些程序與父程序共享很多東西,

共享的東西都不用複製給子程序, 從而節省很多開銷, 因此,這些子程序也叫輕量級程序(light-weight process)

在linux中線程就是輕量級的程序

fork後, 子程序複製哪些東西

一句話總結, 就是所有 writeable 的東西都會複製.包括:

堆,棧, 資料段, 未初始化資料段, 開啟的檔案描述符,

訊號安裝過的handler, 共享庫, ipc(共享記憶體,訊息佇列,訊號量)

注意未決訊號不會繼承過來, 新程序會重置它的未決訊號鏈

子程序和父程序共享哪些東西

一句話總結, 就是所有 read-only 的東西都不用複製, 父子程序共享, 包括:

正文段和字串常量

哪些東西, 子程序不會從父程序繼承

程序id, 各種鎖(記憶體鎖,檔案鎖), 定時器, 未決訊號

在作業系統中。乙個使用者級的執行緒如果對應乙個系統級執行緒,就可以充分利用linux多核的特性。

但是在早期的linux版本中,linux使用者級程序的多個執行緒對應乙個系統級的程序,不能充分利用作業系統的特性!

linux程序和執行緒

這兩天一直在看linxu程序和執行緒的東西,總是效率比較低,這麼一點基礎的東西還看了這麼久。該自我反省一下。首先來看看程序。程序分為三個部分,程序控制塊,程式段和資料段。程序是乙個有生命的實體,程式是乙個沒有生命的實體。只有cpu賦予程式生命的時候,程式才成為乙個活動的實體,我們稱之為 程序 每乙個...

Linux程序和執行緒

linux核心只有程序,沒有執行緒的概念。非要說區別,那就是執行緒沒有自己的單獨的位址空間 mm struct 執行緒和其父程序共享位址空間。pthread呼叫fork clone vm 來建立新的程序,子程序與父程序共享vm空間。注意,這裡實際上是共享mm struct結構,子程序甚至沒有建立自己...

linux 程序和執行緒

程序和執行緒 程序 process 和執行緒 thread 是作業系統的基本概念,下面用乙個模擬,來解釋它們。1.計算機的核心是cpu,它承擔了所有的計算任務。它就像一座工廠,時刻在執行。2.假定工廠的電力有限,一次只能供給乙個車間使用。也就是說,乙個車間開工的時候,其他車間都必須停工。背後的含義就...