網(wǎng)站建設(shè)的項(xiàng)目計(jì)劃書網(wǎng)店運(yùn)營(yíng)實(shí)訓(xùn)報(bào)告
c/cpp - 多線程/進(jìn)程 基礎(chǔ)
- 1. 概念
- 1.1 程序
- 1.2 任務(wù)
- 1.3 多任務(wù)
- 1.4 進(jìn)程
- 1.5 線程
- 1.5 線程/進(jìn)程
- 應(yīng)用程序/系統(tǒng)資源
- 并發(fā)/并行/同步/異步
1. 概念
1.1 程序
代碼、指令,靜態(tài)的
1.2 任務(wù)
具體要做的實(shí)景,可以是基于進(jìn)程、或基于線程
1.3 多任務(wù)
例如:當(dāng)執(zhí)行的程序執(zhí)行I/O操作時(shí),操作系統(tǒng)會(huì)將CPU資源分配給其他等待執(zhí)行的程序
兩種類型的多任務(wù)
基于進(jìn)程:基于進(jìn)程的多任務(wù)處理,是程序的并發(fā)執(zhí)行
基于線程:基于線程的多任務(wù)處理,是同一程序的片段的并發(fā)執(zhí)行
1.4 進(jìn)程
進(jìn)程:正在執(zhí)行的應(yīng)用程序,多任務(wù)操作系統(tǒng)可以控制各個(gè)進(jìn)程的執(zhí)行狀態(tài),如:終止某個(gè)正在執(zhí)行的進(jìn)程,啟動(dòng)某個(gè)暫停執(zhí)行的進(jìn)程
是動(dòng)態(tài)的,程序的實(shí)例化
操作系統(tǒng)負(fù)責(zé)為每個(gè)進(jìn)程分配獨(dú)立的內(nèi)存和其他資源(I/o設(shè)備,文件等)
進(jìn)程執(zhí)行完畢后,操作系統(tǒng)會(huì)將進(jìn)程占用的資源全部回收
補(bǔ)充-早期多進(jìn)程
早期的做任務(wù)操作系統(tǒng),是以進(jìn)程為單位管理各個(gè)程序的運(yùn)行以及計(jì)算機(jī)的分配和回收
缺點(diǎn):
- 操作系統(tǒng)將CPU資源從一個(gè)進(jìn)程分配給另一個(gè)進(jìn)程時(shí),開(kāi)銷較大
- 各個(gè)進(jìn)程占用的內(nèi)存空間相互獨(dú)立,進(jìn)程間通信難度大
- 一個(gè)進(jìn)程可能會(huì)執(zhí)行多個(gè)任務(wù)(子任務(wù)),當(dāng)某個(gè)任務(wù)因I/O操作暫停執(zhí)行時(shí),其他任務(wù)將無(wú)法執(zhí)行(在無(wú)多線程的情況下)
1.5 線程
為解決早起多進(jìn)程缺點(diǎn),引入線程
線程:執(zhí)行應(yīng)用程序中的某個(gè)具體任務(wù)(進(jìn)程:正在執(zhí)行的應(yīng)用程序)(具體任務(wù):一段程序等)
一個(gè)進(jìn)程可以有多個(gè)線程,線程之間共享進(jìn)程的資源
1.5 線程/進(jìn)程
進(jìn)程之間獨(dú)立
進(jìn)程內(nèi)為多個(gè)線程提供資源
進(jìn)程內(nèi)多個(gè)線程共享資源
進(jìn)程內(nèi)每個(gè)線程不同的具體任務(wù)
進(jìn)程內(nèi)各個(gè)線程可以擁有自己的獨(dú)立私有資源
每個(gè)進(jìn)程執(zhí)行前,操作系統(tǒng)會(huì)為其分配所需的資源:程序代碼、數(shù)據(jù)、內(nèi)存空間、文件資源等
一個(gè)進(jìn)程必須包含至少一個(gè)線程(主線程)
/*
公司(程序1):一個(gè)多進(jìn)程的程序進(jìn)程1(工廠1)- 線程1(工人1)- 線程2(工人2)進(jìn)程2(工廠2)- 線程3(工人3)- 線程4(工人4)
*/
應(yīng)用程序/系統(tǒng)資源
操作系統(tǒng)支持同時(shí)執(zhí)行多個(gè)應(yīng)用程序,為避免多個(gè)應(yīng)用程序訪問(wèn)系統(tǒng)資源(文件資源、I/O設(shè)備、網(wǎng)絡(luò)等)時(shí)產(chǎn)生沖突,操作系統(tǒng)會(huì)將可能產(chǎn)生沖突的系統(tǒng)資源保護(hù)起來(lái),阻止應(yīng)用程序直接訪問(wèn)
應(yīng)用程序需要訪問(wèn)系統(tǒng)資源時(shí),需要調(diào)用系統(tǒng)API
并發(fā)/并行/同步/異步
- 并發(fā)
計(jì)算機(jī)能夠同時(shí)執(zhí)行多項(xiàng)任務(wù);
并發(fā)的形式有許多不同:單核處理器:時(shí)間分片的形式,一個(gè)任務(wù)執(zhí)行一段時(shí)間,也就是任務(wù)交替進(jìn)行。也被稱為進(jìn)程或者線程的上下文切換
多核處理器:在多個(gè)核心上,真正并行的執(zhí)行任務(wù),也就是以并行的形式實(shí)現(xiàn)并發(fā)
- 并行
多核心并行執(zhí)行任務(wù)
- 同步
同步:必須等到前一個(gè)任務(wù)執(zhí)行完畢之后,才能執(zhí)行下一個(gè)任務(wù)
在同步中,沒(méi)有并發(fā)和并行的概念
- 異步
不同任務(wù)之間,并不會(huì)相互等待,先后執(zhí)行(即在執(zhí)行任務(wù)A的時(shí)候,也可以同時(shí)執(zhí)行任務(wù)B)
也就多線程編程
補(bǔ)充
多線程編程:多核心并發(fā),適用于計(jì)算密集型應(yīng)用程序
單線程異步編程:強(qiáng)制單核心并發(fā),適用于I/O操作密集型應(yīng)用程序