iOS 線程.進(jìn)程.多CPU.多核

線程的定義:

線程是進(jìn)程的基本執(zhí)行單元 一個(gè)進(jìn)程的所有任務(wù)都是在線程中執(zhí)行。

進(jìn)程要執(zhí)行任務(wù) 必須有線程,進(jìn)程中至少要有一個(gè)線程

進(jìn)程的定義:

進(jìn)程是系統(tǒng)中運(yùn)行的一個(gè)程序

每一個(gè)進(jìn)程都是獨(dú)立的 沒個(gè)進(jìn)程運(yùn)行其專用的切受保護(hù)的內(nèi)存中

區(qū)別:

地址空間:同一進(jìn)程的線程共享本進(jìn)程的地址空間,而進(jìn)程之間則是獨(dú)立的地址空間.

資源擁有:同一進(jìn)程內(nèi)的線程共享本進(jìn)程的資源如內(nèi)存,I/O,CPU等,但是進(jìn)程之前的資源是獨(dú)立的

一個(gè)進(jìn)程崩潰后,在保護(hù)模式下不會(huì)對(duì)其他進(jìn)程產(chǎn)生影響,但是一個(gè)線程崩潰整個(gè)進(jìn)程都死掉.所以多進(jìn)程要比多線程健壯.

進(jìn)程切換時(shí),消耗的資源大,效率低.所以設(shè)計(jì)到頻繁的切換時(shí),使用線程要高于進(jìn)程.同樣如果要求同時(shí)進(jìn)行又要共享某些變量的并發(fā)操作,只能用線程不能用進(jìn)程

執(zhí)行過程:每個(gè)獨(dú)立的進(jìn)程有一個(gè)程序運(yùn)行的入口,順序執(zhí)行序列.但是線程不能獨(dú)立執(zhí)行,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個(gè)線程執(zhí)行控制.

線程是處理器調(diào)度的基本單元,但是進(jìn)程不是.

cpu架構(gòu)和工作原理:

計(jì)算機(jī)有5大基本組成部分,運(yùn)算器,控制器,存儲(chǔ)器,輸入和輸出。運(yùn)算器和控制器封裝到一起,加上寄存器組和cpu內(nèi)部總線構(gòu)成中央處理器(CPU)。cpu的根本任務(wù),就是執(zhí)行指令,對(duì)計(jì)算機(jī)來說,都是0,1組成的序列,cpu從邏輯上可以劃分為3個(gè)模塊:控制單元、運(yùn)算單元和存儲(chǔ)單元。這三個(gè)部分由cpu總線連接起來。

CPU的運(yùn)行原理就是:控制單元在時(shí)序脈沖的作用下,將指令計(jì)數(shù)器里所指向的指令地址(這個(gè)地址是在內(nèi)存里的)送到地址總線上去,然后CPU將這個(gè)地址里的指令讀到指令寄存器進(jìn)行譯碼。對(duì)于執(zhí)行指令過程中所需要用到的數(shù)據(jù),會(huì)將數(shù)據(jù)地址也送到地址總線,然后CPU把數(shù)據(jù)讀到CPU的內(nèi)部存儲(chǔ)單元(就是內(nèi)部寄存器)暫存起來,最后命令運(yùn)算單元對(duì)數(shù)據(jù)進(jìn)行處理加工。周而復(fù)始,一直這樣執(zhí)行下去。

多核cpu和多cpu:

多cpu的運(yùn)行,對(duì)應(yīng)進(jìn)程的運(yùn)行狀態(tài);多核cpu的運(yùn)行,對(duì)應(yīng)線程的運(yùn)行狀態(tài)。

對(duì)于多核cpu,進(jìn)程中的多線程并行執(zhí)行,執(zhí)行過程中存在線程切換,線程切換開銷較小。對(duì)于單核cpu,多線程在單cpu中并發(fā)執(zhí)行,根據(jù)時(shí)間片切換線程。同一個(gè)線程同一時(shí)間段只能在一個(gè)cpu內(nèi)核中運(yùn)行,如果線程數(shù)小于cpu內(nèi)核數(shù),那么將有多余的內(nèi)核空閑。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容