基本概念
進(jìn)程:一個(gè)程序在一個(gè)數(shù)據(jù)集合上的一次運(yùn)行過程。所以一個(gè)程序在不同數(shù)據(jù)集合上運(yùn)行,乃至一個(gè)程序在同樣數(shù)據(jù)集合上的多次運(yùn)行都是不同的進(jìn)程。
線程:線程是進(jìn)程中的一個(gè)實(shí)體,是被系統(tǒng)獨(dú)立調(diào)度和執(zhí)行的基本單位。
兩者的區(qū)別
進(jìn)程是程序的一次執(zhí)行;線程可以理解為進(jìn)程中執(zhí)行的一段程序片段。
1.進(jìn)程間是獨(dú)立的,表現(xiàn)在內(nèi)存空間、上下文環(huán)境上;線程運(yùn)行在進(jìn)程空間內(nèi)。一般來說,進(jìn)程無法突破進(jìn)程邊界存取其他進(jìn)程內(nèi)的存儲(chǔ)空間;而同一進(jìn)程內(nèi)的線程共享同一內(nèi)存空間
2.同一進(jìn)程中的兩端代碼不能同時(shí)執(zhí)行,除非引入線程。
3.線程屬于進(jìn)程,當(dāng)進(jìn)程退出時(shí),該進(jìn)程所產(chǎn)生的線程都會(huì)被強(qiáng)制退出并清除
4.線程占用的資源少于進(jìn)程占用的資源
5.進(jìn)程間可以通過IPC通信,但線程不可以。
IPC(Inter-Process Communication)
數(shù)據(jù)傳輸:一個(gè)進(jìn)程需要將它的數(shù)據(jù)發(fā)送給另一個(gè)進(jìn)程,發(fā)送的數(shù)據(jù)量在一個(gè)字節(jié)到幾M字節(jié)之間
共享數(shù)據(jù):多個(gè)進(jìn)程想要操作共享數(shù)據(jù),一個(gè)進(jìn)程對(duì)共享數(shù)據(jù)的修改,別的進(jìn)程應(yīng)該立刻看到。
通知事件:一個(gè)進(jìn)程需要向另一個(gè)或一組進(jìn)程發(fā)送消息,通知它(它們)發(fā)生了某種事件(如進(jìn)程終止時(shí)要通知父進(jìn)程)。
資源共享:多個(gè)進(jìn)程之間共享同樣的資源。為了作到這一點(diǎn),需要內(nèi)核提供鎖和同步機(jī)制。
進(jìn)程控制:有些進(jìn)程希望完全控制另一個(gè)進(jìn)程的執(zhí)行(如Debug進(jìn)程),此時(shí)控制進(jìn)程希望能夠攔截另一個(gè)進(jìn)程的所有陷入和異常,并能夠及時(shí)知道它的狀態(tài)改變。