線程的定義:
線程是進(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)核空閑。