鋼結(jié)構(gòu)網(wǎng)站建設(shè)cpu優(yōu)化軟件
目錄
- 一、多進(jìn)程優(yōu)缺點(diǎn)
- 二、多線程優(yōu)缺點(diǎn)
- 三、使用多執(zhí)行流的場(chǎng)景
??在多任務(wù)處理中,我們既可以使用多進(jìn)程,也可以使用多線程。但多進(jìn)程和多線程并不是隨意選擇的,因?yàn)樗鼈儜?yīng)對(duì)的場(chǎng)景不同,優(yōu)缺點(diǎn)也不同。
一、多進(jìn)程優(yōu)缺點(diǎn)
?多進(jìn)程就是在程序中創(chuàng)建多個(gè)子進(jìn)程來(lái)執(zhí)行不同的分支。
?多進(jìn)程的優(yōu)點(diǎn):
- 多進(jìn)程的穩(wěn)定性強(qiáng)、健壯性強(qiáng)。(如果子進(jìn)程崩潰,不會(huì)影響父進(jìn)程)
- 某些系統(tǒng)調(diào)用接口針對(duì)的是進(jìn)程。
- 任務(wù)處理的效率高。
?多進(jìn)程的缺點(diǎn):
- 多進(jìn)程間調(diào)度成本大。因?yàn)槊總€(gè)進(jìn)程都有獨(dú)立的虛擬內(nèi)存和頁(yè)表,調(diào)度時(shí)需要加載頁(yè)表等信息。
- 進(jìn)程創(chuàng)建和銷毀成本大。創(chuàng)建進(jìn)程時(shí)除了pcb,還需要?jiǎng)?chuàng)建虛擬空間和頁(yè)表等信息,因此耗費(fèi)比較大。
二、多線程優(yōu)缺點(diǎn)
?多線程是在進(jìn)程中劃分多個(gè)執(zhí)行流,每個(gè)執(zhí)行流是一個(gè)線程。
?多線程優(yōu)點(diǎn):
- 線程間通信很靈活。(進(jìn)程間通信方式線程也可以使用,同時(shí)線程間通信方式還有全局變量和函數(shù)傳參)
- 同一進(jìn)程的線程間的調(diào)度成本很低,因?yàn)楣蚕淼氖峭粋€(gè)虛擬內(nèi)存和頁(yè)表,調(diào)度時(shí)不需要重新加載頁(yè)表等資源。
- 線程的創(chuàng)建和銷毀成本低。創(chuàng)建線程只需要?jiǎng)?chuàng)建pcb,并且大部分?jǐn)?shù)據(jù)共享。
- 任務(wù)處理效率高。
?多線程缺點(diǎn):
- 穩(wěn)定性不如多進(jìn)程。一個(gè)線程崩潰后,可能會(huì)影響整個(gè)程序。
- 同一進(jìn)程的線程共用同一個(gè)虛擬內(nèi)存。這樣每個(gè)線程都不能隨心所欲地使用空間了。
三、使用多執(zhí)行流的場(chǎng)景
?介紹兩種適合使用多執(zhí)行流的場(chǎng)景:CPU密集型程序、IO密集型程序。
?CPU密集型程序:
?(1)CPU密集是指程序?qū)PU的依賴程度很高,這說(shuō)明程序中大部分都是數(shù)據(jù)處理,因?yàn)镃PU就是用來(lái)運(yùn)算的。
?(2)現(xiàn)在的計(jì)算機(jī)基本都是多核,所以如果將一個(gè)CPU密集型程序分為多個(gè)執(zhí)行流,讓每個(gè)核心執(zhí)行一條執(zhí)行流,那么將會(huì)大大提升數(shù)據(jù)的運(yùn)算速率。
?(3)但執(zhí)行流并不是越多越好,因?yàn)槌绦蚴乔袚Q調(diào)度運(yùn)行的,太多的執(zhí)行流意味著要經(jīng)常進(jìn)行調(diào)度,成本就太高了,因此要找一個(gè)合適的執(zhí)行流數(shù)量。
?IO密集型程序:
?(1)IO密集型程序是指程序?qū)O設(shè)備的依賴度很高,具有非常多的IO操作。
?(2)IO操作包含兩部分:IO等待,數(shù)據(jù)拷貝。IO等待就是程序要等待IO設(shè)備資源空閑才可以使用,數(shù)據(jù)拷貝就是IO數(shù)據(jù)的操作。
?(3)CPU的處理速度很快,但I(xiàn)O數(shù)據(jù)的處理是從硬盤讀取或?qū)懭氲?#xff0c;速度上遠(yuǎn)遠(yuǎn)比不過(guò)CPU處理的速度,因此IO操作中耗費(fèi)時(shí)間最多的步驟其實(shí)是等待IO設(shè)備。
?(4)如果只有一個(gè)執(zhí)行流,假如有兩個(gè)IO請(qǐng)求,一個(gè)A程序,一個(gè)B程序,這兩個(gè)程序要使用同一個(gè)IO設(shè)備,那么就需要排隊(duì)。
?(5)排隊(duì)時(shí)首先進(jìn)行A程序的兩個(gè)階段,然后進(jìn)行B程序的兩個(gè)階段。如圖:
?(6)如果有兩個(gè)執(zhí)行流,那么兩個(gè)程序就可以同時(shí)進(jìn)行IO等待,這樣就能減少總體的運(yùn)行時(shí)間。