什么是Python進(jìn)程?針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。
為石景山等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及石景山網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、石景山網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
進(jìn)程
進(jìn)程(Process)是計(jì)算機(jī)中的程序關(guān)于某數(shù)據(jù)集合上的一次運(yùn)行,即正在運(yùn)行的程序,是系統(tǒng)進(jìn)行資源分配和調(diào)度的基本單位,進(jìn)程是對(duì)正在運(yùn)行程序的一個(gè)抽象,在早期面向進(jìn)程設(shè)計(jì)的計(jì)算機(jī)結(jié)構(gòu)中,進(jìn)程是程序的基本執(zhí)行實(shí)體,在當(dāng)代面向線程設(shè)計(jì)的計(jì)算機(jī)結(jié)構(gòu)中,進(jìn)程是線程的容器,線程是執(zhí)行的實(shí)體。進(jìn)程的概念起源于操作系統(tǒng),是操作系統(tǒng)最核心的概念,操作系統(tǒng)的其他所有內(nèi)容都是圍繞進(jìn)程的概念展開的。
在早期計(jì)算機(jī)中可以利用的cpu只有一個(gè),為了充分利用CPU性能,提高用戶操作體驗(yàn),出現(xiàn)了多道技術(shù)。將一個(gè)單獨(dú)的cpu虛擬成多個(gè)cpu(多道技術(shù):時(shí)間多路復(fù)用和空間多路復(fù)用+硬件上支持隔離),即使在一個(gè)單核CPU也能保證支持(偽)并發(fā)的能力。如果沒(méi)有進(jìn)程的抽象,現(xiàn)代計(jì)算機(jī)將不復(fù)存在。
狹義定義:進(jìn)程是正在運(yùn)行的程序的實(shí)例(an instance of a computer program that is being executed)。
廣義定義:進(jìn)程是一個(gè)具有一定獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合的一次運(yùn)行活動(dòng)。它是操作系統(tǒng)動(dòng)態(tài)執(zhí)行的基本單元,在傳統(tǒng)的操作系統(tǒng)中,進(jìn)程既是基本的分配單元,也是基本的執(zhí)行單元。
操作系統(tǒng)的作用:
隱藏復(fù)雜的硬件接口,提供良好的抽象接口。
管理、調(diào)度進(jìn)程,使多個(gè)進(jìn)程對(duì)硬件的競(jìng)爭(zhēng)變得有序。
多道技術(shù):針對(duì)早期單核CPU,實(shí)現(xiàn)多個(gè)程序的并發(fā)執(zhí)行,現(xiàn)在的主機(jī)一般是多核,每個(gè)核都會(huì)利用多道技術(shù),如有4個(gè)cpu,運(yùn)行于cpu1的某個(gè)程序遇到io阻塞,會(huì)等到io結(jié)束再重新調(diào)度,重新調(diào)度是可能會(huì)被調(diào)度到4個(gè)cpu中的任意一個(gè),具體由操作系統(tǒng)調(diào)度算法決定。
多道技術(shù)的主要特性如下:
(1)空間上的復(fù)用:內(nèi)存中可以同時(shí)有多道程序。
(2)物理隔離:多個(gè)程序在內(nèi)存中都有各自獨(dú)立的內(nèi)存空間,互不影響。
(3)時(shí)間上的復(fù)用:多個(gè)程序在操作系統(tǒng)的調(diào)度算法下,在不同的時(shí)間段內(nèi)分別占有CPU資源。
需要注意的是如果一個(gè)進(jìn)程長(zhǎng)時(shí)間占用CPU資源,操作系統(tǒng)會(huì)強(qiáng)制將CPU資源分配給其它在就緒隊(duì)列中的程序,避免一個(gè)程序長(zhǎng)時(shí)間占有CPU資源,導(dǎo)致其它程序無(wú)法運(yùn)行。
關(guān)于進(jìn)程的一些概念:
第一,進(jìn)程是一個(gè)實(shí)體。每一個(gè)進(jìn)程都有它自己的地址空間,一般情況下,包括文本區(qū)域(text region)、數(shù)據(jù)區(qū)域(data region)和堆棧(stack region)。文本區(qū)域存儲(chǔ)處理器執(zhí)行的代碼,數(shù)據(jù)區(qū)域存儲(chǔ)變量和進(jìn)程執(zhí)行期間使用的動(dòng)態(tài)分配的內(nèi)存,堆棧區(qū)域存儲(chǔ)著活動(dòng)過(guò)程調(diào)用的指令和本地變量。
第二,進(jìn)程是一個(gè)“執(zhí)行中的程序”。程序是一個(gè)沒(méi)有生命的實(shí)體,只有處理器賦予程序生命時(shí)(操作系統(tǒng)將程序加載到內(nèi)存),它才能成為一個(gè)活動(dòng)的實(shí)體,我們稱其為進(jìn)程。
進(jìn)程是操作系統(tǒng)中最基本、重要的概念。是多道程序系統(tǒng)出現(xiàn)后,為了刻畫系統(tǒng)內(nèi)部出現(xiàn)的動(dòng)態(tài)情況,描述系統(tǒng)內(nèi)部各道程序的活動(dòng)規(guī)律引進(jìn)的一個(gè)概念,所有多道程序設(shè)計(jì)操作系統(tǒng)都建立在進(jìn)程的基礎(chǔ)上。
進(jìn)程的特性:
動(dòng)態(tài)性:進(jìn)程的實(shí)質(zhì)是程序在多道程序系統(tǒng)中的一次執(zhí)行過(guò)程,進(jìn)程是動(dòng)態(tài)產(chǎn)生,動(dòng)態(tài)消亡的。
并發(fā)性:任何進(jìn)程都可以同其他進(jìn)程一起并發(fā)執(zhí)行
獨(dú)立性:進(jìn)程是一個(gè)能獨(dú)立運(yùn)行的基本單位,同時(shí)也是系統(tǒng)分配資源和調(diào)度的獨(dú)立單位;
異步性:由于進(jìn)程間的相互制約,使進(jìn)程具有執(zhí)行的間斷性,即進(jìn)程按各自獨(dú)立的、不可預(yù)知的速度向前推進(jìn)
結(jié)構(gòu)特征:進(jìn)程由程序、數(shù)據(jù)和進(jìn)程控制塊三部分組成。
多個(gè)不同的進(jìn)程可以包含相同的程序,一個(gè)程序在不同的數(shù)據(jù)集里就構(gòu)成不同的進(jìn)程,能得到不同的結(jié)果,但是執(zhí)行過(guò)程中,程序不能發(fā)生改變。
進(jìn)程與程序的區(qū)別:
程序是指令和數(shù)據(jù)的有序集合,是對(duì)指令、數(shù)據(jù)及其組織形式的描述,其本身沒(méi)有任何運(yùn)行的含義,是一個(gè)靜態(tài)的概念。而進(jìn)程是程序在處理機(jī)上的一次執(zhí)行過(guò)程,它是一個(gè)動(dòng)態(tài)的概念。
程序可以作為一種軟件資料長(zhǎng)期存在,而進(jìn)程是有一定生命期的。程序是永久的,進(jìn)程是暫時(shí)的。
進(jìn)程的調(diào)度:
要想多個(gè)進(jìn)程交替運(yùn)行,操作系統(tǒng)必須對(duì)這些進(jìn)程進(jìn)行調(diào)度,這個(gè)調(diào)度也不是隨機(jī)進(jìn)行的,而是需要遵循一定的法則,由此就有了進(jìn)程的調(diào)度算法。
1、先來(lái)先服務(wù)算法
先來(lái)先服務(wù)(FCFS)調(diào)度算法是一種最簡(jiǎn)單的調(diào)度算法,該算法既可用于作業(yè)調(diào)度,也可用于進(jìn)程調(diào)度。FCFS算法比較有利于長(zhǎng)作業(yè)(進(jìn)程),而不利于短作業(yè)(進(jìn)程)。由此可知,本算法適合于CPU繁忙型作業(yè),而不利于I/O繁忙型的作業(yè)(進(jìn)程)。
2、短作業(yè)優(yōu)先調(diào)度算法
短作業(yè)(進(jìn)程)優(yōu)先調(diào)度算法(SJ/PF)是指對(duì)短作業(yè)或短進(jìn)程優(yōu)先調(diào)度的算法,該算法既可用于作業(yè)調(diào)度,也可用于進(jìn)程調(diào)度。但其對(duì)長(zhǎng)作業(yè)不利;不能保證緊迫性作業(yè)(進(jìn)程)被及時(shí)處理;作業(yè)的長(zhǎng)短只是被估算出來(lái)的。
3、時(shí)間片輪轉(zhuǎn)法
時(shí)間片輪轉(zhuǎn)(Round Robin,RR)法的基本思路是讓每個(gè)進(jìn)程在就緒隊(duì)列中的等待時(shí)間與享受服務(wù)的時(shí)間成比例。在時(shí)間片輪轉(zhuǎn)法中,需要將CPU的處理時(shí)間分成固定大小的時(shí)間片,例如,幾十毫秒至幾百毫秒。如果一個(gè)進(jìn)程在被調(diào)度選中之后用完了系統(tǒng)規(guī)定的時(shí)間片,但又未完成要求的任務(wù),則它自行釋放自己所占有的CPU而排到就緒隊(duì)列的末尾,等待下一次調(diào)度。同時(shí),進(jìn)程調(diào)度程序又去調(diào)度當(dāng)前就緒隊(duì)列中的第一個(gè)進(jìn)程。
顯然,輪轉(zhuǎn)法只能用來(lái)調(diào)度分配一些可以搶占的資源。這些可以搶占的資源可以隨時(shí)被剝奪,而且可以將它們?cè)俜峙浣o別的進(jìn)程。CPU是可搶占資源的一種。但打印機(jī)等資源是不可搶占的。由于作業(yè)調(diào)度是對(duì)除了CPU之外的所有系統(tǒng)硬件資源的分配,其中包含有不可搶占資源,所以作業(yè)調(diào)度不使用輪轉(zhuǎn)法。
在輪轉(zhuǎn)法中,時(shí)間片長(zhǎng)度的選取非常重要。首先,時(shí)間片長(zhǎng)度的選擇會(huì)直接影響到系統(tǒng)的開銷和響應(yīng)時(shí)間。如果時(shí)間片長(zhǎng)度過(guò)短,則調(diào)度程序搶占處理機(jī)的次數(shù)增多。這將使進(jìn)程上下文切換次數(shù)也大大增加,從而加重系統(tǒng)開銷。反過(guò)來(lái),如果時(shí)間片長(zhǎng)度選擇過(guò)長(zhǎng),例如,一個(gè)時(shí)間片能保證就緒隊(duì)列中所需執(zhí)行時(shí)間最長(zhǎng)的進(jìn)程能執(zhí)行完畢,則輪轉(zhuǎn)法變成了先來(lái)先服務(wù)法。時(shí)間片長(zhǎng)度的選擇是根據(jù)系統(tǒng)對(duì)響應(yīng)時(shí)間的要求和就緒隊(duì)列中所允許最大的進(jìn)程數(shù)來(lái)確定的。
在輪轉(zhuǎn)法中,加入到就緒隊(duì)列的進(jìn)程有3種情況:
(1)一種是分給它的時(shí)間片用完,但進(jìn)程還未完成,回到就緒隊(duì)列的末尾等待下次調(diào)度去繼續(xù)執(zhí)行。
(2)另一種情況是分給該進(jìn)程的時(shí)間片并未用完,只是因?yàn)檎?qǐng)求I/O或由于進(jìn)程的互斥與同步關(guān)系而被阻塞。當(dāng)阻塞解除之后再回到就緒隊(duì)列。
(3)第三種情況就是新創(chuàng)建進(jìn)程進(jìn)入就緒隊(duì)列。
如果對(duì)這些進(jìn)程區(qū)別對(duì)待,給予不同的優(yōu)先級(jí)和時(shí)間片從直觀上看,可以進(jìn)一步改善系統(tǒng)服務(wù)質(zhì)量和效率。例如,我們可把就緒隊(duì)列按照進(jìn)程到達(dá)就緒隊(duì)列的類型和進(jìn)程被阻塞時(shí)的阻塞原因分成不同的就緒隊(duì)列,每個(gè)隊(duì)列按FCFS原則排列,各隊(duì)列之間的進(jìn)程享有不同的優(yōu)先級(jí),但同一隊(duì)列內(nèi)優(yōu)先級(jí)相同。這樣,當(dāng)一個(gè)進(jìn)程在執(zhí)行完它的時(shí)間片之后,或從睡眠中被喚醒以及被創(chuàng)建之后,將進(jìn)入不同的就緒隊(duì)列。
多級(jí)反饋隊(duì)列:
前面介紹的各種用作進(jìn)程調(diào)度的算法都有一定的局限性。如短進(jìn)程優(yōu)先的調(diào)度算法,僅照顧了短進(jìn)程而忽略了長(zhǎng)進(jìn)程,而且如果并未指明進(jìn)程的長(zhǎng)度,則短進(jìn)程優(yōu)先和基于進(jìn)程長(zhǎng)度的搶占式調(diào)度算法都將無(wú)法使用。
而多級(jí)反饋隊(duì)列調(diào)度算法則不必事先知道各種進(jìn)程所需的執(zhí)行時(shí)間,而且還可以滿足各種類型進(jìn)程的需要,因而它是目前被公認(rèn)的一種較好的進(jìn)程調(diào)度算法。在采用多級(jí)反饋隊(duì)列調(diào)度算法的系統(tǒng)中,調(diào)度算法的實(shí)施過(guò)程如下所述。
(1) 應(yīng)設(shè)置多個(gè)就緒隊(duì)列,并為各個(gè)隊(duì)列賦予不同的優(yōu)先級(jí)。第一個(gè)隊(duì)列的優(yōu)先級(jí)最高,第二個(gè)隊(duì)列次之,其余各隊(duì)列的優(yōu)先權(quán)逐個(gè)降低。該算法賦予各個(gè)隊(duì)列中進(jìn)程執(zhí)行時(shí)間片的大小也各不相同,在優(yōu)先權(quán)愈高的隊(duì)列中,為每個(gè)進(jìn)程所規(guī)定的執(zhí)行時(shí)間片就愈小。例如,第二個(gè)隊(duì)列的時(shí)間片要比第一個(gè)隊(duì)列的時(shí)間片長(zhǎng)一倍,……,第i+1個(gè)隊(duì)列的時(shí)間片要比第i個(gè)隊(duì)列的時(shí)間片長(zhǎng)一倍。
(2) 當(dāng)一個(gè)新進(jìn)程進(jìn)入內(nèi)存后,首先將它放入第一隊(duì)列的末尾,按FCFS原則排隊(duì)等待調(diào)度。當(dāng)輪到該進(jìn)程執(zhí)行時(shí),如它能在該時(shí)間片內(nèi)完成,便可準(zhǔn)備撤離系統(tǒng);如果它在一個(gè)時(shí)間片結(jié)束時(shí)尚未完成,調(diào)度程序便將該進(jìn)程轉(zhuǎn)入第二隊(duì)列的末尾,再同樣地按FCFS原則等待調(diào)度執(zhí)行;如果它在第二隊(duì)列中運(yùn)行一個(gè)時(shí)間片后仍未完成,再依次將它放入第三隊(duì)列,……,如此下去,當(dāng)一個(gè)長(zhǎng)作業(yè)(進(jìn)程)從第一隊(duì)列依次降到第n隊(duì)列后,在第n 隊(duì)列便采取按時(shí)間片輪轉(zhuǎn)的方式運(yùn)行。
(3) 僅當(dāng)?shù)谝魂?duì)列空閑時(shí),調(diào)度程序才調(diào)度第二隊(duì)列中的進(jìn)程運(yùn)行;僅當(dāng)?shù)?~(i-1)隊(duì)列均空時(shí),才會(huì)調(diào)度第i隊(duì)列中的進(jìn)程運(yùn)行。如果處理機(jī)正在第i隊(duì)列中為某進(jìn)程服務(wù)時(shí),又有新進(jìn)程進(jìn)入優(yōu)先權(quán)較高的隊(duì)列(第1~(i-1)中的任何一個(gè)隊(duì)列),則此時(shí)新進(jìn)程將搶占正在運(yùn)行進(jìn)程的處理機(jī),即由調(diào)度程序把正在運(yùn)行的進(jìn)程放回到第i隊(duì)列的末尾,把處理機(jī)分配給新到的高優(yōu)先權(quán)進(jìn)程。
關(guān)于什么是Python進(jìn)程問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。