os.fork

os.fork

有兩種方式來(lái)實(shí)現(xiàn)并發(fā)性,

一種方式是讓每個(gè)“任務(wù)"或“進(jìn)程”在單獨(dú)的內(nèi)在空間中工作,每個(gè)都有自已的工作內(nèi)存區(qū)域明刷。不過(guò),雖然進(jìn)程可在單獨(dú)的內(nèi)存空間中執(zhí)行满粗,但除非這些進(jìn)程在單獨(dú)的處理器上執(zhí)行辈末,否則,實(shí)際并不是“同時(shí)”運(yùn)行的映皆。是由操作系統(tǒng)把處理器的時(shí)間片分配給一個(gè)進(jìn)程挤聘,用完時(shí)間片后就需退出處理器等待另一個(gè)時(shí)間片的到來(lái)。

另一種方式是在在程序中指定多個(gè)“執(zhí)行線程”捅彻,讓它們?cè)谙嗤膬?nèi)存空間中工作组去。這稱為“多線程處理”。線程比進(jìn)程更有效步淹,因?yàn)椴僮飨到y(tǒng)不必為每個(gè)線程創(chuàng)建單獨(dú)的內(nèi)存空間从隆。

新建進(jìn)程用os.fork函數(shù)。但它只在POSIX系統(tǒng)上可用缭裆,在windows版的python中键闺,os模塊沒(méi)有定義os.fork函數(shù)。相反幼驶,windows程序員用多線程編程技術(shù)來(lái)完成并發(fā)任務(wù)。

os.fork函數(shù)創(chuàng)建進(jìn)程的過(guò)程是這樣的韧衣。程序每次執(zhí)行時(shí)盅藻,操作系統(tǒng)都會(huì)創(chuàng)建一個(gè)新進(jìn)程來(lái)運(yùn)行程序指令。進(jìn)程還可調(diào)用os.fork畅铭,要求操作系統(tǒng)新建一個(gè)進(jìn)程氏淑。父進(jìn)程是調(diào)用os.fork函數(shù)的進(jìn)程。父進(jìn)程所創(chuàng)建的進(jìn)程叫子進(jìn)程硕噩。每個(gè)進(jìn)程都有一個(gè)不重復(fù)的進(jìn)程ID號(hào)假残。或稱pid,它對(duì)進(jìn)程進(jìn)行標(biāo)識(shí)辉懒。子進(jìn)程與父進(jìn)程完全相同阳惹,子進(jìn)程從父進(jìn)程繼承了多個(gè)值的拷貝,如全局變量和環(huán)境變量眶俩。兩個(gè)進(jìn)程的唯一區(qū)別是fork的返回值莹汤。子進(jìn)程接收返回值0,而父進(jìn)程接收子進(jìn)程的pid作為返回值颠印。一個(gè)現(xiàn)有進(jìn)程可以調(diào)用fork函數(shù)創(chuàng)建一個(gè)新進(jìn)程纲岭。由fork創(chuàng)建的新進(jìn)程被稱為子進(jìn)程(child process)。fork函數(shù)被調(diào)用一次但返回兩次线罕。兩次返回的唯一區(qū)別是子進(jìn)程中返回0值而父進(jìn)程中返回子進(jìn)程ID止潮。 對(duì)于程序,只要判斷fork的返回值钞楼,就知道自己是處于父進(jìn)程還是子進(jìn)程中喇闸。

子進(jìn)程是父進(jìn)程的副本,它將獲得父進(jìn)程數(shù)據(jù)空間窿凤、堆仅偎、棧等資源的副本衣厘。注意表谊,子進(jìn)程持有的是上述存儲(chǔ)空間的“副本”,這意味著父子進(jìn)程間不共享這些存儲(chǔ)空間觉渴,它們之間共享的存儲(chǔ)空間只有代碼段夯秃。
  用os.fork創(chuàng)建的子進(jìn)程和父進(jìn)程作為異步的并發(fā)進(jìn)程而單獨(dú)執(zhí)行座咆。異步是指它們各行其是,相互間不進(jìn)行同步仓洼;并發(fā)是指它們可同時(shí)執(zhí)行介陶。所以我們無(wú)法知道子進(jìn)程和父進(jìn)程的相對(duì)速度。
  os.wait函數(shù)用于等待子進(jìn)程結(jié)束(只適用于UNIX兼容系統(tǒng))色建。該函數(shù)返回包含兩個(gè)元素的元組哺呜,包括已完成的子進(jìn)程號(hào)pid,以及子進(jìn)程的退出狀態(tài)箕戳,返回狀態(tài)為0某残,表明子進(jìn)程成功完成。返回狀態(tài)為正整數(shù)表明子進(jìn)程終止時(shí)出錯(cuò)陵吸。如沒(méi)有子進(jìn)程玻墅,會(huì)引發(fā)OSError錯(cuò)誤。os.wait要求父進(jìn)程等待它的任何一個(gè)子進(jìn)程結(jié)束執(zhí)行壮虫,然后喚醒父進(jìn)程澳厢。

要指示父進(jìn)程等候一個(gè)指定的子進(jìn)程終止,可在父進(jìn)程中使用os.waitpid函數(shù)(只適用于unix兼容系統(tǒng))。它可等候一個(gè)指定進(jìn)程結(jié)束剩拢,然后返回一個(gè)雙元素元組线得,其中包括子進(jìn)程的pid和子進(jìn)程的退出狀態(tài)。函數(shù)調(diào)用將pid作為第一個(gè)參數(shù)傳遞裸扶,并將一個(gè)選項(xiàng)作為第二個(gè)選項(xiàng)框都,如果第一個(gè)參數(shù)大于 0,則waitpid會(huì)等待該pid結(jié)束呵晨,如果第一個(gè)參數(shù)是-1魏保,則會(huì)等候所有子進(jìn)程,也就和os.wait一樣摸屠。
  用os.system 和 os.exec函數(shù)族來(lái)執(zhí)行系統(tǒng)命令和其它程序谓罗。os.system使用shell來(lái)執(zhí)行系統(tǒng)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末季二,一起剝皮案震驚了整個(gè)濱河市檩咱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌胯舷,老刑警劉巖刻蚯,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異桑嘶,居然都是意外死亡炊汹,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門逃顶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)讨便,“玉大人,你說(shuō)我怎么就攤上這事以政“园” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵盈蛮,是天一觀的道長(zhǎng)废菱。 經(jīng)常有香客問(wèn)我,道長(zhǎng)抖誉,這世上最難降的妖魔是什么殊轴? 我笑而不...
    開(kāi)封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮寸五,結(jié)果婚禮上梳凛,老公的妹妹穿的比我還像新娘耿币。我一直安慰自己梳杏,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著十性,像睡著了一般叛溢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上劲适,一...
    開(kāi)封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天楷掉,我揣著相機(jī)與錄音,去河邊找鬼霞势。 笑死烹植,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的愕贡。 我是一名探鬼主播草雕,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼固以!你這毒婦竟也來(lái)了墩虹?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤憨琳,失蹤者是張志新(化名)和其女友劉穎诫钓,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體篙螟,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡菌湃,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了闲擦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片慢味。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖墅冷,靈堂內(nèi)的尸體忽然破棺而出纯路,到底是詐尸還是另有隱情,我是刑警寧澤寞忿,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布驰唬,位于F島的核電站,受9級(jí)特大地震影響腔彰,放射性物質(zhì)發(fā)生泄漏叫编。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一霹抛、第九天 我趴在偏房一處隱蔽的房頂上張望搓逾。 院中可真熱鬧,春花似錦杯拐、人聲如沸霞篡。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)朗兵。三九已至污淋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間余掖,已是汗流浹背寸爆。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留盐欺,地道東北人赁豆。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像冗美,于是被迫代替她去往敵國(guó)和親歌憨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • ——參考自《Python編程金典》 ??在并行執(zhí)行的多個(gè)任務(wù)的應(yīng)用程序中墩衙,創(chuàng)建新進(jìn)程非常有用务嫡。例如,Apache ...
    H_fb4e閱讀 1,601評(píng)論 0 0
  • Linux 操作系統(tǒng)提供了一個(gè) fork() 函數(shù)用來(lái)創(chuàng)建子進(jìn)程漆改,這個(gè)函數(shù)很特殊心铃,調(diào)用一次,返回兩次挫剑,因?yàn)椴僮飨到y(tǒng)...
    kongxx閱讀 2,304評(píng)論 1 0
  • Linux 進(jìn)程管理與程序開(kāi)發(fā) 進(jìn)程是Linux事務(wù)管理的基本單元去扣,所有的進(jìn)程均擁有自己獨(dú)立的處理環(huán)境和系統(tǒng)資源,...
    JamesPeng閱讀 2,467評(píng)論 1 14
  • 1.內(nèi)存的頁(yè)面置換算法 (1)最佳置換算法(OPT)(理想置換算法):從主存中移出永遠(yuǎn)不再需要的頁(yè)面奔滑;如無(wú)這樣的...
    杰倫哎呦哎呦閱讀 3,249評(píng)論 1 9
  • 計(jì)算機(jī)系統(tǒng)漫游 代碼從文本到可執(zhí)行文件的過(guò)程(c語(yǔ)言示例):預(yù)處理階段,處理 #inlcude 顺少, #defin...
    willdimagine閱讀 3,584評(píng)論 0 5