線程與進(jìn)程
-
進(jìn)程(ps -aux)
- 守護(hù)進(jìn)程:控制終端并周期性執(zhí)行任務(wù)或處理事件,不受用戶登錄或注銷的影響
- 孤兒進(jìn)程:父程序先退出了惭婿,子程序托付給了Init進(jìn)程
- 僵尸進(jìn)程:進(jìn)程終止叶雹,但是父程序未獲取其狀態(tài),需要保留部分信息
fork:父進(jìn)程與子進(jìn)程擁有相同的內(nèi)存映像折晦,同樣的環(huán)境字符串和同樣的打開(kāi)文件(可寫(xiě)的內(nèi)容是不可共享的)
進(jìn)程的三種狀態(tài):
1.運(yùn)行態(tài):該時(shí)刻進(jìn)程實(shí)際占用CPU
2.就緒態(tài):可運(yùn)行,因?yàn)槠渌M(jìn)程正在運(yùn)行而暫時(shí)停止運(yùn)行
3.阻塞態(tài):除非發(fā)生某種外部時(shí)間满着,否則進(jìn)程不能運(yùn)行
阻塞態(tài)不能直接到運(yùn)行態(tài)
-
線程:并行實(shí)體擁有共享同一個(gè)地址空間和所有可用數(shù)據(jù)的能力贯莺,輕量級(jí)
線程的狀態(tài)
- 運(yùn)行
- 阻塞
- 就緒
- 終止
-
進(jìn)程間通信(Inter Process Communication)
a. 匿名管道:半雙工乖篷,用于父子進(jìn)程和兄弟進(jìn)程之間透且,單獨(dú)構(gòu)成一種獨(dú)立的文件系統(tǒng),緩沖區(qū)有限秽誊,無(wú)格式字節(jié)流
b. 命名管道:提供路徑名與之關(guān)聯(lián),以文件形式存在于文件系統(tǒng)锅论,只要能夠訪問(wèn)該路徑,就能夠彼此通過(guò)命名管道通信最易,先進(jìn)先出原則
c. 信號(hào)量:
- 信號(hào)是Linux系統(tǒng)中用于進(jìn)程間互相通信或者操作的一種機(jī)制,信號(hào)可以在任何時(shí)候發(fā)給某一進(jìn)程藻懒,而無(wú)需知道該進(jìn)程的狀態(tài)。
- 如果該進(jìn)程當(dāng)前并未處于執(zhí)行狀態(tài)嬉荆,則該信號(hào)就有內(nèi)核保存起來(lái),知道該進(jìn)程回復(fù)執(zhí)行并傳遞給它為止鄙早。
- 如果一個(gè)信號(hào)被進(jìn)程設(shè)置為阻塞,則該信號(hào)的傳遞被延遲限番,直到其阻塞被取消是才被傳遞給進(jìn)程。
d. 消息隊(duì)列: - 消息隊(duì)列是存放于內(nèi)核中的消息鏈表慌闭,每個(gè)消息隊(duì)列由消息隊(duì)列標(biāo)識(shí)符表示
- 只有在內(nèi)核重啟時(shí)或顯式地刪除一個(gè)消息隊(duì)列時(shí),該消息隊(duì)列才會(huì)被真正刪除
- 不需要某個(gè)進(jìn)程在等待消息的到達(dá)(與管道的差別)
- 先進(jìn)先出原則,可以隨機(jī)查詢省古,也可以按照消息類型讀取
e. 共享內(nèi)存 - 多個(gè)進(jìn)程可以直接讀取同一塊內(nèi)存空間,是最快的IPC
- 為了在多個(gè)進(jìn)程間交換信息豺妓,內(nèi)核專門留出了一塊內(nèi)存區(qū)布讹,可以由需要訪問(wèn)的進(jìn)程將其映射到自己的私有地址空間。進(jìn)程就可以直接讀寫(xiě)這一塊內(nèi)存而不需要進(jìn)行數(shù)據(jù)的拷貝描验,從而大大提高效率。
- 需要同步與互斥
參考文獻(xiàn)