成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

python大佬養(yǎng)成計(jì)劃----進(jìn)程、線程與多進(jìn)程

taowen / 1104人閱讀

摘要:在一個進(jìn)程內(nèi)部,要同時干多件事,就需要同時運(yùn)行多個子任務(wù),我們把進(jìn)程內(nèi)的這些子任務(wù)稱為線程??偨Y(jié)一下,多任務(wù)的實(shí)現(xiàn)方式有三種多進(jìn)程模式多線程模式多進(jìn)程多線程模式線程是最小的執(zhí)行單元,而進(jìn)程由至少一個線程組成。

進(jìn)程與線程

很多同學(xué)都聽說過,現(xiàn)代操作系統(tǒng)比如Mac OS X,UNIX,Linux,Windows等,都是支持“多任務(wù)”的操作系統(tǒng)。

什么叫“多任務(wù)”呢?簡單地說,就是操作系統(tǒng)可以同時運(yùn)行多個任務(wù)。打個比方,你一邊在用瀏覽器上網(wǎng),一邊在聽MP3,一邊在用Word趕作業(yè),這就是多任務(wù),至少同時有3個任務(wù)正在運(yùn)行。還有很多任務(wù)悄悄地在后臺同時運(yùn)行著,只是桌面上沒有顯示而已。

現(xiàn)在,多核CPU已經(jīng)非常普及了,但是,即使過去的單核CPU,也可以執(zhí)行多任務(wù)。由于CPU執(zhí)行代碼都是順序執(zhí)行的,那么,單核CPU是怎么執(zhí)行多任務(wù)的呢?

答案就是操作系統(tǒng)輪流讓各個任務(wù)交替執(zhí)行,任務(wù)1執(zhí)行0.01秒,切換到任務(wù)2,任務(wù)2執(zhí)行0.01秒,再切換到任務(wù)3,執(zhí)行0.01秒……這樣反復(fù)執(zhí)行下去。表面上看,每個任務(wù)都是交替執(zhí)行的,但是,由于CPU的執(zhí)行速度實(shí)在是太快了,我們感覺就像所有任務(wù)都在同時執(zhí)行一樣。

真正的并行執(zhí)行多任務(wù)只能在多核CPU上實(shí)現(xiàn),但是,由于任務(wù)數(shù)量遠(yuǎn)遠(yuǎn)多于CPU的核心數(shù)量,所以,操作系統(tǒng)也會自動把很多任務(wù)輪流調(diào)度到每個核心上執(zhí)行。

對于操作系統(tǒng)來說,一個任務(wù)就是一個進(jìn)程(Process),比如打開一個瀏覽器就是啟動一個瀏覽器進(jìn)程,打開一個記事本就啟動了一個記事本進(jìn)程,打開兩個記事本就啟動了兩個記事本進(jìn)程,打開一個Word就啟動了一個Word進(jìn)程。
有些進(jìn)程還不止同時干一件事,比如Word,它可以同時進(jìn)行打字、拼寫檢查、打印等事情。在一個進(jìn)程內(nèi)部,要同時干多件事,就需要同時運(yùn)行多個“子任務(wù)”,我們把進(jìn)程內(nèi)的這些“子任務(wù)”稱為線程(Thread)。
由于每個進(jìn)程至少要干一件事,所以,一個進(jìn)程至少有一個線程。當(dāng)然,像Word這種復(fù)雜的進(jìn)程可以有多個線程,多個線程可以同時執(zhí)行,多線程的執(zhí)行方式和多進(jìn)程是一樣的,也是由操作系統(tǒng)在多個線程之間快速切換,讓每個線程都短暫地交替運(yùn)行,看起來就像同時執(zhí)行一樣。當(dāng)然,真正地同時執(zhí)行多線程需要多核CPU才可能實(shí)現(xiàn)。

我們前面編寫的所有的Python程序,都是執(zhí)行單任務(wù)的進(jìn)程,也就是只有一個線程。
如果我們要同時執(zhí)行多個任務(wù)怎么辦?
有兩種解決方案:
一種是啟動多個進(jìn)程,每個進(jìn)程雖然只有一個線程,但多個進(jìn)程可以一塊執(zhí)行多個任務(wù)。
還有一種方法是啟動一個進(jìn)程,在一個進(jìn)程內(nèi)啟動多個線程,這樣,多個線程也可以一塊執(zhí)行多個任務(wù)。
當(dāng)然還有第三種方法,就是啟動多個進(jìn)程,每個進(jìn)程再啟動多個線程,這樣同時執(zhí)行的任務(wù)就更多了,當(dāng)然這種模型更復(fù)雜,實(shí)際很少采用。
總結(jié)一下,多任務(wù)的實(shí)現(xiàn)方式有三種:

多進(jìn)程模式

多線程模式

多進(jìn)程+多線程模式

線程是最小的執(zhí)行單元,而進(jìn)程由至少一個線程組成。如何調(diào)度進(jìn)程和線程,完全由操作系統(tǒng)決定,程序自己不能決定什么時候執(zhí)行,執(zhí)行多長時間。
多進(jìn)程和多線程的程序涉及到同步、數(shù)據(jù)共享的問題,編寫起來更復(fù)雜。

并行與并發(fā)

無論是并行還是并發(fā),在用戶看來都是同時運(yùn)行的,不管是進(jìn)程還是線程,都只是一個任務(wù)而已,
真正干活的是CPU,CPU來做這些任務(wù),而一個cpu(單核)同一時刻只能執(zhí)行一個任務(wù)。
并行:多個任務(wù)同時運(yùn)行,只有具備多個cpu才能實(shí)現(xiàn)并行,含有幾個cpu,也就意味著在同一時刻可以執(zhí)行幾個任務(wù)。
并發(fā):是偽并行,即看起來是同時運(yùn)行的,實(shí)際上是單個CPU在多道程序之間來回的進(jìn)行切換。

同步與異步

同步就是指一個進(jìn)程在執(zhí)行某個請求的時候,若該請求需要一段時間才能返回信息,那么這個進(jìn)程將會一直等待下去,直到收到返回信息才繼續(xù)執(zhí)行下去。
異步是指進(jìn)程不需要一直等下去,而是繼續(xù)執(zhí)行下面的操作,不管其他進(jìn)程的狀態(tài)。當(dāng)有消息返回時系統(tǒng)會通知進(jìn)行處理,這樣可以提高執(zhí)行的效率。
打電話的過程就是同步通信,發(fā)短信時就是異步通信。

父進(jìn)程與子進(jìn)程

子進(jìn)程創(chuàng)建后,父進(jìn)程和子進(jìn)程有各自不同的地址空間,多道技術(shù)要求物理層面實(shí)現(xiàn)進(jìn)程之間內(nèi)存的
隔離,任何一個進(jìn)程在其地址空間的修改都不會影響到另外一個進(jìn)程。
注意:子進(jìn)程和父進(jìn)程之間是可以有只讀的共享的內(nèi)存區(qū)域的。
進(jìn)程與進(jìn)程之間數(shù)據(jù)(資源)是隔離的,兩個進(jìn)程之間可以基于管道這種方式進(jìn)行通信。在Unix當(dāng)中,是含有進(jìn)程層次的概念的,但是在windows當(dāng)中,是沒有進(jìn)程層次的概念的,所有的進(jìn)程都是地位相同的。
在Linux當(dāng)中,每啟動一個命令,都會啟動一個進(jìn)程。

python中線程特點(diǎn)

在其他語言當(dāng)中,一個進(jìn)程里面開啟多個線程,每個線程都可以給一個cpu去使用,但是在
python當(dāng)中,在同一時刻,一個進(jìn)程當(dāng)中只能有一個線程處于運(yùn)行狀態(tài)。
eg:在其他語言當(dāng)中,比如我現(xiàn)在開啟了一個進(jìn)程,這個進(jìn)程當(dāng)中含有幾個線程,如果我現(xiàn)在有多個cpu,每一個線程是可以對應(yīng)相應(yīng)的CPU的。
但是在python當(dāng)中,如果我們現(xiàn)在開啟了一個進(jìn)程,這個進(jìn)程里面對應(yīng)多個線程,同一時刻只有一個線程可以處于運(yùn)行狀態(tài)。
對于其他語言而言,在多CPU系統(tǒng)中,為了最大限度的利用多核,可以開啟多個線程。
但是Python中的多線程是利用不了多核優(yōu)勢的。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/42437.html

相關(guān)文章

  • python大佬養(yǎng)成計(jì)劃----線程與多線程

    摘要:申明守護(hù)線程需要在開啟線程之前。線程池線程都是后臺線程。每個線程都使用默認(rèn)的堆棧大小,以默認(rèn)的優(yōu)先級運(yùn)行,并處于多線程單元中。 創(chuàng)建線程 一個進(jìn)程必有一個線程,進(jìn)程也可由多個線程組成,但有一個線程為主線程。若一個任務(wù)需要花10Mins,當(dāng)只有一個線程時,花費(fèi)10Mins,當(dāng)有十個線程時,可能就花費(fèi)1Mins,所以多線程可以提升任務(wù)執(zhí)行時間,提高工作效率。python里與線程有關(guān)的模塊:...

    roundstones 評論0 收藏0
  • python大佬養(yǎng)成計(jì)劃-----多進(jìn)程

    摘要:多進(jìn)程執(zhí)行任務(wù)結(jié)束,創(chuàng)建進(jìn)程和銷毀進(jìn)程是時間的,如果長度不夠,會造成多線程快過多進(jìn)程多線程執(zhí)行任務(wù)結(jié)束,進(jìn)程間通信生產(chǎn)者消費(fèi)者模型與隊(duì)列演示了生產(chǎn)者和消費(fèi)者的場景。 進(jìn)程 Python是運(yùn)行在解釋器中的語言,查找資料知道,python中有一個全局鎖(GIL),在使用多進(jìn)程(Thread)的情況下,不能發(fā)揮多核的優(yōu)勢。而使用多進(jìn)程(Multiprocess),則可以發(fā)揮多核的優(yōu)勢真正地提...

    zhangfaliang 評論0 收藏0
  • python大佬養(yǎng)成計(jì)劃----協(xié)程

    摘要:協(xié)程,又稱微線程,纖程。最大的優(yōu)勢就是協(xié)程極高的執(zhí)行效率。生產(chǎn)者產(chǎn)出第條數(shù)據(jù)返回更新值更新消費(fèi)者正在調(diào)用第條數(shù)據(jù)查看當(dāng)前進(jìn)行的線程函數(shù)中有,返回值為生成器庫實(shí)現(xiàn)協(xié)程通過提供了對協(xié)程的基本支持,但是不完全。 協(xié)程,又稱微線程,纖程。英文名Coroutine協(xié)程看上去也是子程序,但執(zhí)行過程中,在子程序內(nèi)部可中斷,然后轉(zhuǎn)而執(zhí)行別的子程序,在適當(dāng)?shù)臅r候再返回來接著執(zhí)行。 最大的優(yōu)勢就是協(xié)程極高...

    svtter 評論0 收藏0
  • python大佬養(yǎng)成計(jì)劃--協(xié)程實(shí)現(xiàn)TCP連接

    摘要:協(xié)程實(shí)現(xiàn)連接在網(wǎng)絡(luò)通信中,每個連接都必須創(chuàng)建新線程或進(jìn)程來處理,否則,單線程在處理連接的過程中,無法接受其他客戶端的連接。所以我們嘗試使用協(xié)程來實(shí)現(xiàn)服務(wù)器對多個客戶端的響應(yīng)。 協(xié)程實(shí)現(xiàn)TCP連接 在網(wǎng)絡(luò)通信中,每個連接都必須創(chuàng)建新線程(或進(jìn)程) 來處理,否則,單線程在處理連接的過程中, 無法接受其他客戶端的連接。所以我們嘗試使用協(xié)程來實(shí)現(xiàn)服務(wù)器對多個客戶端的響應(yīng)。與單一TCP通信的構(gòu)架...

    fuchenxuan 評論0 收藏0
  • python大佬養(yǎng)成計(jì)劃----分布式進(jìn)程

    摘要:分布式進(jìn)程在和中,應(yīng)當(dāng)優(yōu)選,因?yàn)楦€(wěn)定,而且,可以分布到多臺機(jī)器上,而最多只能分布到同一臺機(jī)器的多個上。由于模塊封裝很好,不必了解網(wǎng)絡(luò)通信的細(xì)節(jié),就可以很容易地編寫分布式多進(jìn)程程序。 分布式進(jìn)程 在Thread和Process中,應(yīng)當(dāng)優(yōu)選Process,因?yàn)镻rocess更穩(wěn)定,而且,Process可以分布到多臺機(jī)器上,而Thread最多只能分布到同一臺機(jī)器的多個CPU上。 Pytho...

    honmaple 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<