fork Join 執行緒可以建立多個嗎

2025-01-26 10:40:24 字數 2990 閱讀 7757

1樓:藤原子大雄

我不太理解你為什麼說用fork()建立執行緒。

我覺得,你不應該把父子程序輸出都統一。

這樣,就像樓上所說的全是hello world

這樣不便於分析。

看看如下**:

#include #include #include #include #define err_exit(msg) (perror(msg),(exit(1)))int main(void) else if(pid>0)else return 0; }結果如下:

i am parent ..

i am child ..

這樣似乎還是沒有分析出他們具有父子關係。 所以再修改**:

#include

#include

#include

#include

#define err_exit(msg) (perror(msg),(exit(1)))

int main(void)

pid_t pid;

pid=fork();if(pid==0)else if(pid>0)else return 0;

得到結果如下:

i am parent ..

my child pid==3926

i am child ..

my father pid==3925

在程式睡眠期間。我們呼叫系統工具。

pstree -p |grep t27

查到如下結果:

gnome-terminal(3503)-+bash(3511)--t27(3925)--t27(3926)

這樣你應該能比較清晰理解父子程序的關係。 希望能幫到你!

forkjoin 最多多少個子任務

2樓:僬耪扒悶柯

不是必須存在的,如:if(a0) b0) begin。

python 可以先建立多程序,然後再個每個子程序建立多個執行緒嗎

3樓:網友

可以的,建立多程序用subprocess庫,也可以直接來建立。

多執行緒用threading庫,這個比較簡單,隨便一搜就好多內容啦。

linux 可以**程中再建立執行緒嗎

4樓:閱2受讀接並

1、windows裡的程序/執行緒是繼承自os/2的。在windows裡,"程序"是指乙個程式,而"執行緒"是乙個"程序"裡的乙個執行"線索"。從核心上講,windows的多程序與linux並無多大的區別,在windows裡的執行緒才相當於linux的程序,是乙個實際正在執行的**。

但是,windows裡同乙個程序裡各個執行緒之間是共享資料段的。這才是與linux的程序最大的不同。2、在windows下,使用createthread函式建立執行緒,與linux下建立程序同,windows執行緒不是從建立處開始執行的,而是由createthread指定乙個函式,執行緒就從那個函式處開始執行。

此程式同前面的unix程式一樣,由兩個執行緒各列印1000條資訊。threadid是子執行緒的執行緒號,另外,全域性變數g是子執行緒與父執行緒共享的,這就是與linux最大的不同之處。大家可以看出,windows的程序/執行緒要比linux複雜,在linux要實現類似windows的執行緒並不難,只要fork以後,讓子程序呼叫threadproc函式,並且為全域性變數開設共享資料區就行了,但在windows下就無法實現類似fork的功能了。

所以現在windows下的c語言編譯器所提供的庫函式雖然已經能相容大多數linux/unix的庫函式,但卻仍無法實現對於多工系統,共享資料區是必要的,但也是乙個容易引起混亂的問題,windows下,乙個程式設計師很容易忘記執行緒之間的資料是共享的這一情況,乙個執行緒修改過乙個變數後,另乙個執行緒卻又修改了它,結果引起程式出問題。但在linux下,由於變數本來並不共享,而由程式設計師來顯式地指定要共享的資料,使程式變得更清晰與安全。

j**a執行緒可以在執行在多個cpu核上嗎

5樓:動力節點

cpu在某乙個時間點上確實只能執行乙個執行緒,但是多執行緒不是由於多核或者雙核才叫多執行緒。

是由於,很多個執行緒在並行執行的時候,cpu根據一定的執行緒排程演算法,頻繁的進行執行緒切換,當正在執行的乙個執行緒需要進行io操作或者需要訪問記憶體的時候,cpu完全可以放棄該執行緒,轉而排程執行緒就緒佇列上的其他執行緒,被放棄的執行緒則進入阻塞狀態,io操作或者訪問記憶體操作結束之後,該執行緒可以進入執行緒就緒佇列上。

人們通常意義上的多執行緒指的是,由於cpu根據一定的執行緒排程演算法來切換執行緒,所以在乙個時間段上,可以看做很多執行緒在併發執行。

其實還是在某乙個時間點上只有乙個執行緒在執行罷了。

6樓:網友

我今天也糾結這個問題,搜了一些資料,感覺這樣:

如果在程式中寫了並行命令(fork/join這種),就會執行在多核上;如果只是建立了多個執行緒,就看作業系統怎麼分配了。

linux 可以用fork建立多少程序

7樓:bad綠色原野

建立子程序才能多道程式併發執行,linux初始化的時候會建立swap程序、然後是init程序和乙個init程序的兄弟程序,所有的程序(執行的程式)都是從父程序演化出去的,你可以看看proc裡的東西,寫個程式列印出各個程序的父程序~網上有源**的,要的話我給你咱要先搞明白程序究竟是什麼,程序是資源分配的單位,是執行的程式。既然是執行的程式,乙個程序自然只能代表乙個程式,多道程式設計自然而然就有了多程序的概念。舉個例子,多程序(執行緒)**,我們可以給乙個需要**的資源分片,多個程序從不同的片分時**,這樣就提高了**速度,因為對乙個程式分配的更多的資源,你試試開迅雷的時候開啟個網頁,保證你覺得奇卡無比,因為網路頻寬(資源)被迅雷的多個程序佔用了。

其實在本地的多程序程式並不多見,比如word算是個典型的多程序程式,有個程序接受你的鍵盤輸入,有拼寫檢查程序,有顯示程序等等。大多數都用到網路上了,比如伺服器。一臺伺服器要在「同一時間」處理來自很多客戶端的請求,這就必須使用多程序。

c多執行緒建立的幾種方式,c多執行緒同時執行兩個函式該怎樣程式設計啊

直接使用作業系統api 使用標準c 執行緒支援庫 可跨平臺 使用第三方執行緒庫 如何在windows系統上用c 建立多執行緒 waitformultipleobject sizeof hthreads hthreads,false,infinite,false 執行緒資源釋放 closehandle...

諾基亞7610哪些執行緒可以關?

系統現成一定不可以關,非系統的執行緒不好說,畢竟大家的手機裡安裝的軟體都是不一樣的,所以執行緒也不同。執行緒不同不好說啊。諾基亞手機有嗎 當然有了,不過據說現在停產了。早以前的機子了,現在的機子沒有以前的好了,不推薦使用!有關諾基亞 裝程序管理器和我的電腦,用程序管理器找到程式資料夾所在磁碟的位置,用我的...

多核 多cpu 多程序 多執行緒的關係

程式單一化時可以這麼理解,但現在一般是基於作業系統的,所以作業系統會按其設計優化規則去盡力合理排程和分配硬體資源,但是碰到頻繁的跳轉其效率仍然會降低,這裡cpu的快取越大就越能掩蓋這些非優設計。而程式本身如果按多核模式設計的則效率更高,所以表現出來老的程式在新硬體上執行仍然有提高,而針對多核優化設計...