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

資訊專欄INFORMATION COLUMN

進(jìn)程與線程

Jingbin_ / 709人閱讀

摘要:進(jìn)程與線程進(jìn)程和線程是操作系統(tǒng)的基本概念但是它們比較抽象不容易掌握。線程,有時(shí)被稱為輕量進(jìn)程,,是程序執(zhí)行流的最小單元。

進(jìn)程與線程

進(jìn)程(process)和線程(thread)是操作系統(tǒng)的基本概念,但是它們比較抽象,不容易掌
握。

有一個(gè)很好的類比,可以把它們解釋地清晰易懂。

CPU

計(jì)算機(jī)的核心是CPU,它承擔(dān)了所有的計(jì)算任務(wù)。它就像一座工廠,時(shí)刻在運(yùn)行。

假定工廠的電力有限,一次只能供給一個(gè)車間使用。也就是說,一個(gè)車間開工的時(shí)候,其他車間都必須停工。背后的含義就是,單個(gè)CPU一次只能運(yùn)行一個(gè)任務(wù)。

進(jìn)程

進(jìn)程就好比工廠的車間,它代表CPU所能處理的單個(gè)任務(wù)。任一時(shí)刻,CPU總是運(yùn)行一個(gè)進(jìn)程,其他進(jìn)程處于非運(yùn)行狀態(tài)。

線程

一個(gè)車間里,可以有很多工人。他們協(xié)同完成一個(gè)任務(wù)。

線程就好比車間里的工人。一個(gè)進(jìn)程可以包括多個(gè)線程。

車間的空間是工人們共享的,比如許多房間是每個(gè)工人都可以進(jìn)出的。這象征一個(gè)進(jìn)程的內(nèi)存空間是共享的,每個(gè)線程都可以使用這些共享內(nèi)存。

可是,每間房間的大小不同,有些房間最多只能容納一個(gè)人,比如廁所。里面有人的時(shí)候,其他人就不能進(jìn)去了。這代表一個(gè)線程使用某些共享內(nèi)存時(shí),其他線程必須等它結(jié)束,才能使用這一塊內(nèi)存。

一個(gè)防止他人進(jìn)入的簡(jiǎn)單方法,就是門口加一把鎖。先到的人鎖上門,后到的人看到上鎖,就在門口排隊(duì),等鎖打開再進(jìn)去。這就叫"互斥鎖"(Mutual exclusion,縮寫 Mutex),防止多個(gè)線程同時(shí)讀寫某一塊內(nèi)存區(qū)域。

還有些房間,可以同時(shí)容納n個(gè)人,比如廚房。也就是說,如果人數(shù)大于n,多出來的人只能在外面等著。這好比某些內(nèi)存區(qū)域,只能供給固定數(shù)目的線程使用。

這時(shí)的解決方法,就是在門口掛n把鑰匙。進(jìn)去的人就取一把鑰匙,出來時(shí)再把鑰匙掛回原處。后到的人發(fā)現(xiàn)鑰匙架空了,就知道必須在門口排隊(duì)等著了。這種做法叫做"信號(hào)量"(Semaphore),用來保證多個(gè)線程不會(huì)互相沖突。

進(jìn)程與線程關(guān)系

一個(gè)線程只能屬于一個(gè)進(jìn)程,而一個(gè)進(jìn)程可以有多個(gè)線程,但至少有一個(gè)線程。

資源分配給進(jìn)程,同一進(jìn)程的所有線程共享該進(jìn)程的所有資源。

CPU分給線程,即真正在CPU上運(yùn)行的是線程。

專業(yè)總結(jié)

進(jìn)程(Process)是計(jì)算機(jī)中的程序關(guān)于某數(shù)據(jù)集合上的一次運(yùn)行活動(dòng),是系統(tǒng)進(jìn)行資源分配和調(diào)度的基本單位,是操作系統(tǒng)結(jié)構(gòu)的基礎(chǔ)。

線程,有時(shí)被稱為輕量進(jìn)程(Lightweight Process,LWP),是程序執(zhí)行流的最小單元。是被系統(tǒng)獨(dú)立調(diào)度和分派的基本單位。

多進(jìn)程與多線程 多進(jìn)程情景分析
瀏覽器,網(wǎng)易云音樂以及pycharm 三個(gè)軟件只能順序執(zhí)行是怎樣一種場(chǎng)景呢?本來在python編程時(shí)想要聽個(gè)古典音樂來點(diǎn)靈感, 結(jié)果發(fā)現(xiàn),對(duì)于CPU來說, 一次只能執(zhí)行一個(gè)程序, 太崩潰,  另外,假如有兩個(gè)程序A和B,程序A在執(zhí)行到一半的過程中,需要讀取大量的數(shù)據(jù)輸入(I/O操作),而此時(shí)CPU只能靜靜地等待任務(wù)A讀取完數(shù)據(jù)才能繼續(xù)執(zhí)行,這樣就白白浪費(fèi)了CPU資源。你是不是已經(jīng)想到在程序A讀取數(shù)據(jù)的過程中,讓程序B去執(zhí)行,當(dāng)程序A讀取完數(shù)據(jù)之后,讓程序B暫停。聰明,這當(dāng)然沒問題,但這里有一個(gè)關(guān)鍵詞:切換。

多線程情景分析
假設(shè),一個(gè)文本程序,需要接受鍵盤輸入,將內(nèi)容顯示在屏幕上,還需要保存信息到硬盤中。若只有一個(gè)進(jìn)程,勢(shì)必造成同一時(shí)間只能干一樣事的尷尬(當(dāng)保存時(shí),就不能通過鍵盤輸入內(nèi)容)。若有多個(gè)進(jìn)程,每個(gè)進(jìn)程負(fù)責(zé)一個(gè)任務(wù),進(jìn)程A負(fù)責(zé)接收鍵盤輸入的任務(wù),進(jìn)程B負(fù)責(zé)將內(nèi)容顯示在屏幕上的任務(wù),進(jìn)程C負(fù)責(zé)保存內(nèi)容到硬盤中的任務(wù)。這里進(jìn)程A,B,C間的協(xié)作涉及到了進(jìn)程通信問題,而且有共同都需要擁有的東西——-文本內(nèi)容,不停的切換造成性能上的損失。若有一種機(jī)制,可以使任務(wù)A,B,C共享資源,這樣上下文切換所需要保存和恢復(fù)的內(nèi)容就少了,同時(shí)又可以減少通信所帶來的性能損耗,那就好了。是的,這種機(jī)制就是線程。

串行,并行和并發(fā)

串行處理是當(dāng)一個(gè)程序執(zhí)行結(jié)束, 下一個(gè)程序才可以繼續(xù)執(zhí)行, 否則一直處于等待狀態(tài).

并行處理(Parallel Processing)是計(jì)算機(jī)系統(tǒng)中能同時(shí)執(zhí)行兩個(gè)或更多個(gè)處理的一種計(jì)算方法。并行處理可同時(shí)工作于同一程序的不同方面。并行處理的主要目的是節(jié)省大型和復(fù)雜問題的解決時(shí)間。

并發(fā)處理(concurrency Processing):指一個(gè)時(shí)間段中有幾個(gè)程序都處于已啟動(dòng)運(yùn)行到運(yùn)行完畢之間,且這幾個(gè)程序都是在同一個(gè)處理機(jī)(CPU)上運(yùn)行,但任一個(gè)時(shí)刻點(diǎn)上只有一個(gè)程序在處理機(jī)(CPU)上運(yùn)行

并發(fā)的關(guān)鍵是你有處理多個(gè)任務(wù)的能力,不一定要同時(shí)。并行的關(guān)鍵是你有同時(shí)處理多個(gè)任務(wù)的能力(也就是多個(gè)CPU處理器)。所以說,并行是并發(fā)的子集.

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

操作系統(tǒng)的設(shè)計(jì),因此可以歸結(jié)為三點(diǎn):
(1)以多進(jìn)程形式,允許多個(gè)任務(wù)同時(shí)運(yùn)行;
(2)以多線程形式,允許單個(gè)任務(wù)分成不同的部分運(yùn)行;
(3)提供協(xié)調(diào)機(jī)制,一方面防止進(jìn)程之間和線程之間產(chǎn)生沖突,另一方面允許進(jìn)程之間和線程之間共享資源。

參考資料:
阮一峰的網(wǎng)絡(luò)日志之進(jìn)程與線程的一個(gè)簡(jiǎn)單解釋

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

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

相關(guān)文章

  • 進(jìn)程線程的一個(gè)簡(jiǎn)單解釋

    摘要:線程線程,有時(shí)被稱為輕量級(jí)進(jìn)程,,是程序執(zhí)行流的最小單元。進(jìn)程和線程區(qū)別進(jìn)程是資源分配的基本單位。說得簡(jiǎn)單點(diǎn),下面這段代碼執(zhí)行的時(shí)候參考博文進(jìn)程與線程的一個(gè)簡(jiǎn)單解釋多線程和多進(jìn)程的區(qū)別小結(jié)多線程還是多進(jìn)程的選擇及區(qū)別加鎖 關(guān)于進(jìn)程與線程的簡(jiǎn)單理解(以工廠舉例:cup-》工廠,車間-》進(jìn)程,線程-》工人),可以參考阮一峰的博文進(jìn)程與線程的一個(gè)簡(jiǎn)單圖文解釋 先來了解下進(jìn)程和線程的概念關(guān)于多...

    番茄西紅柿 評(píng)論0 收藏0
  • Java多線程筆記(零):進(jìn)程線程通用概念

    摘要:父進(jìn)程調(diào)用創(chuàng)建子進(jìn)程。因而,一個(gè)進(jìn)程的第一個(gè)線程會(huì)隨著這個(gè)進(jìn)程的啟動(dòng)而創(chuàng)建,這個(gè)線程被稱為該進(jìn)程的主線程。另一方面,線程不可能獨(dú)立于進(jìn)程存在。終止線程線程可以通過多種方式來終結(jié)同一個(gè)進(jìn)程中的其他線程。 前言 不積跬步,無以至千里;不積小流,無以成江海。在學(xué)習(xí)Java多線程相關(guān)的知識(shí)前,我們首先需要去了解一點(diǎn)操作系統(tǒng)的進(jìn)程、線程以及相關(guān)的基礎(chǔ)概念。 進(jìn)程 通常,我們把一個(gè)程序的執(zhí)行稱為一...

    blastz 評(píng)論0 收藏0
  • python大佬養(yǎng)成計(jì)劃----進(jìn)程、線程進(jìn)程

    摘要:在一個(gè)進(jìn)程內(nèi)部,要同時(shí)干多件事,就需要同時(shí)運(yùn)行多個(gè)子任務(wù),我們把進(jìn)程內(nèi)的這些子任務(wù)稱為線程??偨Y(jié)一下,多任務(wù)的實(shí)現(xiàn)方式有三種多進(jìn)程模式多線程模式多進(jìn)程多線程模式線程是最小的執(zhí)行單元,而進(jìn)程由至少一個(gè)線程組成。 進(jìn)程與線程 很多同學(xué)都聽說過,現(xiàn)代操作系統(tǒng)比如Mac OS X,UNIX,Linux,Windows等,都是支持多任務(wù)的操作系統(tǒng)。 什么叫多任務(wù)呢?簡(jiǎn)單地說,就是操作系統(tǒng)可以同時(shí)...

    taowen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<