亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

我相信線程,進程,協(xié)程, 并發(fā),并行,同步,異步這幾個概念大家在編程過程中肯定會遇到,但是偏偏這幾個概念又那么類似,很容易讓人模糊,今天我就用這一篇文章來和大家梳理一下這幾個概念。

1. 同步與異步

  • 當我們 同步 的執(zhí)行某個任務(wù)時,我們需要等到這個任務(wù)執(zhí)行完給我們反饋結(jié)果,我們才能去執(zhí)行其他的任務(wù)。
  • 但是 異步 的執(zhí)行某個任務(wù)時,我們可以不用等這個任務(wù)結(jié)束就去執(zhí)行另一項任務(wù)。就像常用到的異步刷新操作。通過異步執(zhí)行的任務(wù)執(zhí)行結(jié)束后我們可以通過 回調(diào)函數(shù) 獲得結(jié)果。

我們可以明顯的看出同步和異步的差別,那異步操作那么好為什么不都使用異步操作呢?同步操作存在的意義是有些任務(wù)必須是 按順序執(zhí)行 的,就像我們?nèi)ャy行取錢,最起碼的保證你的銀行賬戶里有錢你才能取,要不然豈不是去搶銀行了:full_moon_with_face:。

2. 并發(fā)與并行

2.1 并發(fā) Concurrency

咱們用做早飯來舉例,例如說你還沒起床,你的女朋友已經(jīng)早早的起來了,在廚房給你準備早飯,她想給你做一份面包片和煎蛋,她為了能讓你盡快的吃上早飯,開了兩個鍋,一個鍋用來煎蛋,一個鍋用來煎面包片,但是她為了食物盡可能美味,只能看一下煎蛋的鍋,在去看一下烤面包片,這樣 每個鍋看一分鐘,來回切換 ,這樣終于把面包片和煎蛋做好了,這時你也睡醒了,吃到了美味的早餐。

你女朋友的這個做早飯的流程就是并發(fā)操作,因為她不可能同時將注意力放在兩個鍋上,只能通過逐漸切換注意力的方式來使任務(wù)很好的完成。但是如果你的女朋友可以在兩個鍋之間切換的足夠快:joy:,在旁邊看起來就像是她在同時操作兩個鍋 。

2.2 并行 Parallelism

咱們還是用做早餐為例,現(xiàn)在你和你的女朋友在一起已經(jīng)很久了,她再也受不了天天早上給你做飯的日子了,所以今天早上她把你也拽起來和她一起做飯。同樣還是煎面包片和煎蛋,這時你和你女朋友一份一個鍋,你在準備煎蛋,你的女朋友在煎面包片,你倆就這樣很和諧的做著自己的事互不干擾,很快就吃到了美味的早餐。

你和你的女朋友同時做飯,每個人操作一個鍋的方式就是并行操作。

ps:突然將你想到了,原來自己沒有女朋友 。

2.3 圖解并發(fā)與并行

假設(shè)我們有兩個任務(wù)A和B,我們使用并發(fā)執(zhí)行是這樣的。

線程,進程,協(xié)程, 并發(fā),并行,同步,異步概念解析

 

可以看到雖然A和B作為兩個整體的任務(wù)但是未必會直接執(zhí)行完,而是會在兩個任務(wù)間來回切換。因為cpu切換的速度實在太快了,所以我們看起來好像是A和B在同時執(zhí)行,但其實在每個時間點上只有一個任務(wù)在執(zhí)行。

我們再來看一下并行的方式。

線程,進程,協(xié)程, 并發(fā),并行,同步,異步概念解析

 

并行操作是指兩個任務(wù)同時執(zhí)行的。

3. 進程,線程與協(xié)程

3.1 進程 Process

電腦中每個軟件的啟動就代表一個進程,就是把寫的程序加載到操作系統(tǒng)中來執(zhí)行預(yù)定好的任務(wù)。操作系統(tǒng)會為進程分配相應(yīng)的資源來支撐它完成任務(wù),每個進程會分配一個唯一的PID。

線程,進程,協(xié)程, 并發(fā),并行,同步,異步概念解析

 

我們這次用老王來舉例,假如說老王現(xiàn)在想蓋個房子,我們就可以把蓋房子這件事作為一個任務(wù),而老王就是負責這個任務(wù)的進程。

3.2 線程 Thread

線程是進程的執(zhí)行實例,是一個程序執(zhí)行的最小單元,每個進程里的任務(wù)會有線程去具體執(zhí)行。

線程,進程,協(xié)程, 并發(fā),并行,同步,異步概念解析

 

我們還是繼續(xù)說老王,現(xiàn)在蓋房子這個任務(wù)已經(jīng)確定下來了,但是他發(fā)現(xiàn)自己不會蓋,要請個工人來蓋房子,于是他去外面請了一個工人A,這個工人A要做搬磚和搬木頭的工作,此時這個工人A就是一個 進程 ,老王還要求他這兩個任務(wù)不能差距太大,要同步進行,所以這個工人A只能搬一趟轉(zhuǎn)頭,搬一趟木頭,這樣的操作就是 單線程的并發(fā)操作

干了兩天,工人A不高興了干的活太多了要加錢,這時老王一看一個人干也確實慢,就去外面又請了一個工人B,此時工人B也就對應(yīng)著一個 線程 ,老王讓工人A繼續(xù)搬磚,而工人B來負責搬木頭,這樣兩個任務(wù)就能同時進行了,這就是 多線程的并行操作 。而且此時工人A和工人B是同時 共享著老王提供的資源 。

3.3 進程與線程+單核與多核

其實剛才老王那個例子已經(jīng)能解釋進程與線程的操作了,但是有些不太謹慎。

  • 如果我們使用的是 單核CPU ,那么我們是無法執(zhí)行并行操作的,只能做到并發(fā),這樣來充分調(diào)用CPU的資源。
  • 如果我們使用的是 多核CPU ,我們才可以真正的意義上做到并行操作。

我們的操作系統(tǒng)在進程或線程間切換是比較消耗資源的,因為要保存當前運行狀態(tài)的上下文信息,而且進程或線程的切換是由操作系統(tǒng)決定的,到達運行時間之后,操作系統(tǒng)會將當前執(zhí)行的任務(wù)掛起,我們只能等待下個分配到的時間片來繼續(xù)執(zhí)行任務(wù)。這也就引出來協(xié)程的概念。

3.4 協(xié)程 Coroutine

就像我們剛才說到的,任務(wù)的切換是操作系統(tǒng)來控制,我們有沒有什么辦法來減小這種開銷呢?我們就可以使用協(xié)程, 協(xié)程我們可以理解為輕量級的線程 。 協(xié)程在執(zhí)行過程中不會由操作系統(tǒng)直接操作,而是由編譯器決定,比如協(xié)程A說我當前的任務(wù)還得一段時間執(zhí)行完,我可以讓出當前占用的資源了,協(xié)程A就會通知調(diào)度器,由調(diào)度器來分配下一個協(xié)程執(zhí)行。

分享到:
標簽:解析 概念
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定