最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

第十三章 進(jìn)程和線程

2021-09-28 08:43 作者:海鷗之道  | 我要投稿

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

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

現(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í)行速度實在是太快了,我們感覺就像所有任務(wù)都在同時執(zhí)行一樣。

真正的并行執(zhí)行多任務(wù)只能在多核CPU上實現(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)部,要同時干多件事,就需要同時運行多個“子任務(wù)”,我們把進(jìn)程內(nèi)的這些“子任務(wù)”稱為線程(Thread)。

由于每個進(jìn)程至少要干一件事,所以,一個進(jìn)程至少有一個線程。當(dāng)然,像Word這種復(fù)雜的進(jìn)程可以有多個線程,多個線程可以同時執(zhí)行,多線程的執(zhí)行方式和多進(jìn)程是一樣的,也是由操作系統(tǒng)在多個線程之間快速切換,讓每個線程都短暫地交替運行,看起來就像同時執(zhí)行一樣。當(dāng)然,真正地同時執(zhí)行多線程需要多核CPU才可能實現(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ù)雜,實際很少采用。

總結(jié)一下就是,多任務(wù)的實現(xiàn)有3種方式:

  • 多進(jìn)程模式;

  • 多線程模式;

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

同時執(zhí)行多個任務(wù)通常各個任務(wù)之間并不是沒有關(guān)聯(lián)的,而是需要相互通信和協(xié)調(diào),有時,任務(wù)1必須暫停等待任務(wù)2完成后才能繼續(xù)執(zhí)行,有時,任務(wù)3和任務(wù)4又不能同時執(zhí)行,所以,多進(jìn)程和多線程的程序的復(fù)雜度要遠(yuǎn)遠(yuǎn)高于我們前面寫的單進(jìn)程單線程的程序。

因為復(fù)雜度高,調(diào)試?yán)щy,所以,不是迫不得已,我們也不想編寫多任務(wù)。但是,有很多時候,沒有多任務(wù)還真不行。想想在電腦上看電影,就必須由一個線程播放視頻,另一個線程播放音頻,否則,單線程實現(xiàn)的話就只能先把視頻播放完再播放音頻,或者先把音頻播放完再播放視頻,這顯然是不行的。

Python既支持多進(jìn)程,又支持多線程,我們會討論如何編寫這兩種多任務(wù)程序。

小結(jié)

線程是最小的執(zhí)行單元,而進(jìn)程由至少一個線程組成。如何調(diào)度進(jìn)程和線程,完全由操作系統(tǒng)決定,程序自己不能決定什么時候執(zhí)行,執(zhí)行多長時間。

多進(jìn)程和多線程的程序涉及到同步、數(shù)據(jù)共享的問題,編寫起來更復(fù)雜。


第十三章 進(jìn)程和線程的評論 (共 條)

分享到微博請遵守國家法律
南充市| 全州县| 青岛市| 二连浩特市| 大港区| 东乌珠穆沁旗| 大冶市| 遂宁市| 德保县| 壤塘县| 霸州市| 河北区| 山东| 青海省| 海门市| 刚察县| 康马县| 松滋市| 安福县| 长沙县| 商丘市| 哈尔滨市| 文成县| 樟树市| 山东省| 泰和县| 东莞市| 白山市| 莎车县| 政和县| 杨浦区| 鄂伦春自治旗| 和林格尔县| 承德市| 宣汉县| 兴和县| 双峰县| 云林县| 山东省| 霍山县| 台湾省|