創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!
創(chuàng)新互聯(lián)建站長(zhǎng)期為超過(guò)千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為上栗企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、成都外貿(mào)網(wǎng)站建設(shè)公司,上栗網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。什么是Python線程?針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。
Python線程
進(jìn)程有很多優(yōu)點(diǎn),它提供了多道編程,可以提高計(jì)算機(jī)CPU的利用率。既然進(jìn)程這么優(yōu)秀,為什么還要線程呢?其實(shí),仔細(xì)觀察就會(huì)發(fā)現(xiàn)進(jìn)程還是有很多缺陷的。
主要體現(xiàn)在一下幾個(gè)方面:
進(jìn)程只能在一個(gè)時(shí)間做一個(gè)任務(wù),如果想同時(shí)做兩個(gè)任務(wù)或多個(gè)任務(wù),就必須開(kāi)啟多個(gè)進(jìn)程去完成多個(gè)任務(wù)。
進(jìn)程在執(zhí)行的過(guò)程中如果阻塞,例如等待輸入,整個(gè)進(jìn)程就會(huì)掛起,即使進(jìn)程中有些工作不依賴于輸入的數(shù)據(jù),也將無(wú)法執(zhí)行。
每個(gè)進(jìn)程都有自己的獨(dú)立空間,所以多進(jìn)程的創(chuàng)建,銷毀相比于多線程更加耗時(shí),也更加占用系統(tǒng)資源。
進(jìn)程是資源分配的最小單位,線程是CPU調(diào)度的最小單位,每一個(gè)進(jìn)程中至少有一個(gè)線程?!?/p>
線程與進(jìn)程的區(qū)別
可以歸納為以下4點(diǎn):
1)地址空間:進(jìn)程間相互獨(dú)立的每個(gè)進(jìn)程都有自己獨(dú)立的內(nèi)存空間,也就是說(shuō)一個(gè)進(jìn)程內(nèi)的數(shù)據(jù)在另一個(gè)進(jìn)程是不可見(jiàn)的。但同一進(jìn)程中的各線程間數(shù)據(jù)是共享的。
2)通信:由于每個(gè)進(jìn)程有自己獨(dú)立的內(nèi)存空間,所以進(jìn)程間通信需要IPC,而進(jìn)程內(nèi)的數(shù)據(jù)對(duì)于多個(gè)線程來(lái)說(shuō)是共享的,每個(gè)線程都可以訪問(wèn),所以為了保證數(shù)據(jù)的一致性,需要使用鎖。
3)調(diào)度和切換:線程上下文切換比進(jìn)程上下文切換要快得多。
4)在多線程操作系統(tǒng)中,進(jìn)程不是一個(gè)可執(zhí)行的實(shí)體,它主要的功能是向操作系統(tǒng)申請(qǐng)一塊內(nèi)存空間,然后在內(nèi)存空間中開(kāi)線程來(lái)執(zhí)行任務(wù),相當(dāng)于一個(gè)容器,容器中的線程才是真正的執(zhí)行體。一個(gè)進(jìn)程可以包含多個(gè)線程,而一個(gè)線程是不能包含進(jìn)程的。因?yàn)檫M(jìn)程是系統(tǒng)分配資源的最小單位,所以線程不能向操作系統(tǒng)申請(qǐng)自己的空間,但一個(gè)線程內(nèi)可以包含多個(gè)線程。
線程的特點(diǎn):
在多線程的操作系統(tǒng)中,通常是在一個(gè)進(jìn)程中包括多個(gè)線程,每個(gè)線程都是作為利用CPU的基本單位,是花費(fèi)最小開(kāi)銷的實(shí)體。線程具有以下屬性。
1)輕型實(shí)體
線程中的實(shí)體基本上不擁有系統(tǒng)資源,只是有一點(diǎn)必不可少的、能保證獨(dú)立運(yùn)行的資源。
線程的實(shí)體包括程序、數(shù)據(jù)和TCB。線程是動(dòng)態(tài)概念,它的動(dòng)態(tài)特性由線程控制塊TCB(Thread Control Block)描述。
2)獨(dú)立調(diào)度和分派的基本單位。
在多線程OS中,線程是能獨(dú)立運(yùn)行的基本單位,因而也是獨(dú)立調(diào)度和分派的基本單位。由于線程很“輕”,故線程的切換非常迅速且開(kāi)銷?。ㄔ谕贿M(jìn)程中的)。
3)共享進(jìn)程資源。
在同一進(jìn)程中的各個(gè)線程,都可以共享該進(jìn)程所擁有的資源,這首先表現(xiàn)在:所有線程都具有相同的進(jìn)程id,這意味著,線程可以訪問(wèn)該進(jìn)程的每一個(gè)內(nèi)存資源;此外,還可以訪問(wèn)進(jìn)程所擁有的已打開(kāi)文件、定時(shí)器、信號(hào)量機(jī)構(gòu)等。由于同一個(gè)進(jìn)程內(nèi)的線程共享內(nèi)存和文件,所以線程之間互相通信不必調(diào)用內(nèi)核。
4)可并發(fā)執(zhí)行
在一個(gè)進(jìn)程中的多個(gè)線程之間,可以并發(fā)執(zhí)行,甚至允許在一個(gè)進(jìn)程中所有線程都能并發(fā)執(zhí)行;同樣,不同進(jìn)程中的線程也能并發(fā)執(zhí)行,充分利用和發(fā)揮了處理機(jī)與外圍設(shè)備并行工作的能力。
線程的實(shí)現(xiàn)可以分為兩類:
用戶級(jí)線程(User-Level Thread)和內(nèi)核級(jí)線程(Kernel-Level Thread),后者又稱為內(nèi)核支持的線程或輕量級(jí)進(jìn)程。在多線程操作系統(tǒng)中,各個(gè)系統(tǒng)的實(shí)現(xiàn)方式并不相同,在有的系統(tǒng)中實(shí)現(xiàn)了用戶級(jí)線程,有的系統(tǒng)中實(shí)現(xiàn)了內(nèi)核級(jí)線程。
用戶線程和內(nèi)核線程的區(qū)別:
1、內(nèi)核支持線程是OS內(nèi)核可感知的,而用戶級(jí)線程是OS內(nèi)核不可感知的。
2、用戶級(jí)線程的創(chuàng)建、撤消和調(diào)度不需要OS內(nèi)核的支持,是在語(yǔ)言(如Java)這一級(jí)處理的;而內(nèi)核支持線程的創(chuàng)建、撤消和調(diào)度都需OS內(nèi)核提供支持,而且與進(jìn)程的創(chuàng)建、撤消和調(diào)度大體是相同的。
3、用戶級(jí)線程執(zhí)行系統(tǒng)調(diào)用指令時(shí)將導(dǎo)致其所屬進(jìn)程被中斷,而內(nèi)核支持線程執(zhí)行系統(tǒng)調(diào)用指令時(shí),只導(dǎo)致該線程被中斷。
4、在只有用戶級(jí)線程的系統(tǒng)內(nèi),CPU調(diào)度還是以進(jìn)程為單位,處于運(yùn)行狀態(tài)的進(jìn)程中的多個(gè)線程,由用戶程序控制線程的輪換運(yùn)行;在有內(nèi)核支持線程的系統(tǒng)內(nèi),CPU調(diào)度則以線程為單位,由OS的線程調(diào)度程序負(fù)責(zé)線程的調(diào)度。
5、用戶級(jí)線程的程序?qū)嶓w是運(yùn)行在用戶態(tài)下的程序,而內(nèi)核支持線程的程序?qū)嶓w則是可以運(yùn)行在任何狀態(tài)下的程序。
內(nèi)核線程的優(yōu)缺點(diǎn):
優(yōu)點(diǎn):當(dāng)有多個(gè)處理機(jī)時(shí),一個(gè)進(jìn)程的多個(gè)線程可以同時(shí)執(zhí)行。
缺點(diǎn):由內(nèi)核進(jìn)行調(diào)度。
用戶線程的優(yōu)缺點(diǎn):
優(yōu)點(diǎn):
線程的調(diào)度不需要內(nèi)核直接參與,控制簡(jiǎn)單。
可以在不支持線程的操作系統(tǒng)中實(shí)現(xiàn)。
創(chuàng)建和銷毀線程、線程切換代價(jià)等線程管理的代價(jià)比內(nèi)核線程少得多。
允許每個(gè)進(jìn)程定制自己的調(diào)度算法,線程管理比較靈活。
線程能夠利用的表空間和堆??臻g比內(nèi)核級(jí)線程多。
同一進(jìn)程中只能同時(shí)有一個(gè)線程在運(yùn)行,如果有一個(gè)線程使用了系統(tǒng)調(diào)用而阻塞,那么整個(gè)進(jìn)程都會(huì)被掛起。另外,頁(yè)面失效也會(huì)產(chǎn)生同樣的問(wèn)題。
缺點(diǎn):
資源調(diào)度按照進(jìn)程進(jìn)行,多個(gè)處理機(jī)下,同一個(gè)進(jìn)程中的線程只能在同一個(gè)處理機(jī)下分時(shí)復(fù)用。
關(guān)于什么是Python線程問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道了解更多相關(guān)知識(shí)。
當(dāng)前名稱:什么是Python線程-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)路徑:http://m.rwnh.cn/article34/dcdspe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、網(wǎng)站導(dǎo)航、響應(yīng)式網(wǎng)站、ChatGPT、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容