久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 學習資源 > 講師博文 > 一文(wen)搞懂Linux進程的睡(shui)眠(mian)和喚醒

一文搞懂Linux進程的(de)睡(shui)眠和(he)喚醒 時間:2024-10-18 ;     來源:華清遠(yuan)見

一、常(chang)見的(de)進程狀(zhuang)態(tai)與(yu)理解

在(zai)操作系(xi)統內部,有專門用(yong)來管(guan)理進(jin)程(cheng)(cheng)(cheng)的結構體,叫做struct task_struct,也稱(cheng)作進(jin)程(cheng)(cheng)(cheng)控制塊(PCB),主要包(bao)含描(miao)述進(jin)程(cheng)(cheng)(cheng)的相(xiang)關(guan)信息,如(ru)進(jin)程(cheng)(cheng)(cheng)用(yong)戶、進(jin)程(cheng)(cheng)(cheng)狀態(tai)、進(jin)程(cheng)(cheng)(cheng)優先級(ji)、文(wen)件描(miao)述符(記錄(lu)當(dang)前進(jin)程(cheng)(cheng)(cheng)打開的文(wen)件)、主要進(jin)程(cheng)(cheng)(cheng)標識的進(jin)程(cheng)(cheng)(cheng)號和父進(jin)程(cheng)(cheng)(cheng)號:

進程(cheng)號(PID: Process Identity Number):唯一的標識(shi)一個進程(cheng),用于區分系(xi)(xi)統中的各(ge)個進程(cheng)并方便操(cao)作系(xi)(xi)統進行管理;

父進(jin)(jin)(jin)程(cheng)(cheng)號:(PPID:Parent Process ID):用于描述(shu)一個(ge)進(jin)(jin)(jin)程(cheng)(cheng)的(de)直接父進(jin)(jin)(jin)程(cheng)(cheng)的(de)標(biao)識符,每(mei)個(ge)進(jin)(jin)(jin)程(cheng)(cheng)在創建(jian)時都會(hui)由(you)一個(ge)已有的(de)進(jin)(jin)(jin)程(cheng)(cheng)(即(ji)父進(jin)(jin)(jin)程(cheng)(cheng))生成(cheng),這樣(yang)就形成(cheng)了進(jin)(jin)(jin)程(cheng)(cheng)的(de)層(ceng)級結(jie)構。通過PPID,可以(yi)追蹤進(jin)(jin)(jin)程(cheng)(cheng)的(de)來源,并了解進(jin)(jin)(jin)程(cheng)(cheng)之間的(de)關(guan)系。

在(zai)PCB中記(ji)錄(lu)的(de)進(jin)(jin)(jin)程(cheng)(cheng)狀態,不過是一些(xie)整(zheng)(zheng)數(shu),這個整(zheng)(zheng)數(shu)是多少就(jiu)代(dai)表進(jin)(jin)(jin)程(cheng)(cheng)此時處(chu)于什么狀態。在(zai)CPU執(zhi)行(xing)進(jin)(jin)(jin)程(cheng)(cheng)時,通過找(zhao)到(dao)進(jin)(jin)(jin)程(cheng)(cheng)的(de)PCB,從而找(zhao)到(dao)進(jin)(jin)(jin)程(cheng)(cheng)的(de)代(dai)碼和(he)數(shu)據,進(jin)(jin)(jin)而去(qu)執(zhi)行(xing)這個進(jin)(jin)(jin)程(cheng)(cheng)。下(xia)面列舉了一些(xie)進(jin)(jin)(jin)程(cheng)(cheng)狀態:

注(zhu)意:沒有+時,默(mo)認是后臺進(jin)程

進程(cheng)調度(進程(cheng)狀態切換)

進(jin)(jin)(jin)程(cheng)創建后,進(jin)(jin)(jin)程(cheng)進(jin)(jin)(jin)入(ru)就緒(xu)態(tai)(tai)(tai),當(dang)CPU調(diao)(diao)度(du)到此進(jin)(jin)(jin)程(cheng)時進(jin)(jin)(jin)入(ru)運行態(tai)(tai)(tai),當(dang)時間(jian)片用完(wan)時,此進(jin)(jin)(jin)程(cheng)會進(jin)(jin)(jin)入(ru)就緒(xu)態(tai)(tai)(tai),如(ru)果(guo)此進(jin)(jin)(jin)程(cheng)正在(zai)執行一些IO操作(zuo)(阻塞(sai)操作(zuo))會進(jin)(jin)(jin)入(ru)阻塞(sai)態(tai)(tai)(tai),完(wan)成IO操作(zuo)(阻塞(sai)結束(shu)(shu)(shu))后又(you)可進(jin)(jin)(jin)入(ru)就緒(xu)態(tai)(tai)(tai),等待CPU的調(diao)(diao)度(du),當(dang)進(jin)(jin)(jin)程(cheng)運行結束(shu)(shu)(shu)即進(jin)(jin)(jin)入(ru)結束(shu)(shu)(shu)態(tai)(tai)(tai)。

一、睡眠機(ji)(ji)制(zhi)(zhi)與喚醒機(ji)(ji)制(zhi)(zhi)

睡眠機制:

1)主動睡眠(mian)(Blocking Sleep): 進程自(zi)愿(yuan)進入(ru)睡眠(mian)狀態,通常是通過系統(tong)調用如sleep()、wait()等(deng)。

2)被(bei)(bei)動睡眠(Interruptible Sleep): 進程在等(deng)待某(mou)個條件滿足(如I/O操作),可以被(bei)(bei)信號喚(huan)醒。

Linux通過內核提供(gong)的(de)(de)系統調(diao)用來控(kong)制進程(cheng)的(de)(de)睡眠。常用的(de)(de)系統調(diao)用有:

sleep(): 使進(jin)程暫停指定的秒數。

usleep(): 使進程暫停指定的微秒數(shu)。

nanosleep(): 使進程暫(zan)停指定的納秒數(shu)。

Tips:睡眠機制幫助節省CPU資源(yuan),尤其是在(zai)I/O密(mi)集型任(ren)務(wu)中;在(zai)可中斷睡眠狀(zhuang)態下,進(jin)程在(zai)收到(dao)信號(hao)時會被(bei)喚醒并處理信號(hao)。

喚醒機制

1)信號(Signal): 進程(cheng)可以通(tong)過接受特定信號被喚醒。

 2)條(tiao)件變(bian)量(Condition Variable): 多(duo)線程(cheng)編程(cheng)中用于同步多(duo)個線程(cheng)的工具,可以讓一個線程(cheng)在(zai)某些條(tiao)件下睡眠并等(deng)待被喚醒。

Tips:喚醒機制可(ke)以(yi)通(tong)過信(xin)號、I/O事件和(he)線(xian)程同步原語(如條件變量)來有效管(guan)理進(jin)程和(he)線(xian)程的狀(zhuang)態,更好地利用系統資(zi)源,提高(gao)程序(xu)的響(xiang)應(ying)性與性能。

一、用法實例

1.進程睡(shui)眠(mian)示例:

使用 sleep() 函數(shu)讓進程(cheng)暫停(ting)執行(xing)一(yi)段時間

使(shi)用 usleep() 函數,使(shi)進程睡眠(mian)0.5秒,精(jing)確度更高

使用 nanosleep(),使進程睡眠1.5秒,可以精細控(kong)制時間

2.進程喚(huan)醒實例(li):

使用信號喚(huan)醒進程,進程直到接收到 SIGUSR1 信號被喚(huan)醒。

使用 select() 函數等待I/O,如果在5秒內沒(mei)有輸(shu)入(ru),select() 會返回(hui),以便進(jin)(jin)程(cheng)被(bei)喚醒。若有輸(shu)入(ru),則進(jin)(jin)程(cheng)也(ye)會被(bei)喚醒。

使(shi)用(yong)條(tiao)(tiao)件變(bian)量喚醒(xing)線(xian)程(cheng),子線(xian)程(cheng)在條(tiao)(tiao)件變(bian)量上等待(dai),直到(dao)主線(xian)程(cheng)調用(yong) pthread_cond_signal() 喚醒(xing)它。主線(xian)程(cheng)在等待(dai)2秒后,設置條(tiao)(tiao)件并(bing)喚醒(xing)子線(xian)程(cheng)。(已經描述(shu)到(dao)這里,線(xian)程(cheng)一并(bing)提及一下(xia))

上一篇:進程在什么情況下會產生死鎖

下一篇:人工智能中FOPL語言是什么?

戳我查看嵌(qian)入(ru)式每月就業風云榜

點我了(le)解華(hua)清遠(yuan)見(jian)高校學霸(ba)學習(xi)秘籍

猜你關心企業(ye)是(shi)如何評價華清學員的

干貨分享(xiang)
相關新聞
前臺(tai)專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談(tan)專線:010-82525379 Copyright © 2004-2024 北京華清遠見科技發展有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部