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

資訊專欄INFORMATION COLUMN

異步, 同步, 阻塞, 非阻塞

tyheist / 1196人閱讀

參考鏈接
原文點這
點我
這里講的特別好
異步, 同步, 阻塞, 非阻塞

例如普通B/S模式(同步):提交請求->等待服務器處理->處理完畢返回 這里的是指你提交了一個請求,并沒有立即返回, 
要等到服務器處理完成后, *連帶著返回值一起返回了*

例如 ajax請求(異步): 請求通過事件觸發(fā)->服務器處理->處理完畢。 這個過程是你觸發(fā)了事件后,服務端立即返回,
*但是是不帶返回值的*, 然后當服務端處理完這件事情后, 通過回掉, promise 等各種方式通知你這個返回值。
通俗一點的例子:
同步:你去樓下拿快遞,然后快遞小哥說我?guī)湍阏艺遥?在這過程中你一直等著,直到他找到你的快遞連同快遞一起返回。
異步:你去樓下拿快遞,快遞小哥說我?guī)湍阏遥业酱螂娫捦ㄖ悖?你該干嘛干嘛去。

阻塞和非阻塞
可以這么理解 阻塞就是當你拿快遞的時候, 進程掛起了,你什么也干不了,只能等著快遞小哥告訴你答案你才能去做你的事情.

*非阻塞是指,你的read操作立即返回了,但是沒有帶數(shù)據(jù). 可以通過 輪詢 來實現(xiàn)非阻塞I/O的獲取完完整數(shù)據(jù)的要求,但是對于應用程序來說,他任是一種同步, 因為程序任然需要等IO完全返回,等待的時間,cpu要么用于遍歷文件描述符的狀態(tài),要么用于休眠等待事件發(fā)生.*

講到這里我們知道js 是單線程的.js的主要用途是與用戶交互,以及操作DOM.

*JavaScript的單線程,與它的用途有關(guān)。作為瀏覽器腳本語言,JavaScript的主要用途是與用戶互動,以及操作DOM。這決定了它只能是單線程,否則會帶來很復雜的同步問題。比如,假定JavaScript同時有兩個線程,一個線程在某個DOM節(jié)點上添加內(nèi)容,另一個線程刪除了這個節(jié)點,這時瀏覽器應該以哪個線程為準?*(摘自阮老師的博客)

單線程意味著同一時間只能進行一件事情,前面的事情結(jié)束才能執(zhí)行后面的事件.當碰到需要時間的IO事件的時候問題就來了,必須等到這些結(jié)束后才往下進行,但這時CPU是閑著的.這樣浪費了很多計算機的性能.

JavaScript語言的設(shè)計者意識到,這時主線程完全可以不管IO設(shè)備,掛起處于等待中的任務,先運行排在后面的任務。等到IO設(shè)備返回了結(jié)果,再回過頭,把掛起的任務繼續(xù)執(zhí)行下去.

***于是,所有任務可以分成兩種,一種是同步任務(synchronous),另一種是異步任務(asynchronous)。同步任務指的是,在主線程上排隊執(zhí)行的任務,只有前一個任務執(zhí)行完畢,才能執(zhí)行后一個任務;異步任務指的是,不進入主線程、而進入"任務隊列"(task queue)的任務,只有"任務隊列"通知主線程,某個異步任務可以執(zhí)行了,該任務才會進入主線程執(zhí)行。***
(1)所有同步任務都在主線程上執(zhí)行,形成一個執(zhí)行棧(execution context stack)。
(2)主線程之外,還存在一個"任務隊列"(task queue)。只要異步任務有了運行結(jié)果,就在"任務隊列"之中放置一個事件。
(3)一旦"執(zhí)行棧"中的所有同步任務執(zhí)行完畢,系統(tǒng)就會讀取"任務隊列",看看里面有哪些事件。那些對應的異步任務,于是結(jié)束等待狀態(tài),進入執(zhí)行棧,開始執(zhí)行。
(4)主線程不斷重復上面的第三步。

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

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

相關(guān)文章

  • 徹底搞清 同步,異步,阻塞,阻塞的概念性知識

    摘要:需要先對的概念有一定的認識我們通常使用的打開文件關(guān)閉文件讀讀寫寫這叫本地文件而在編程中本質(zhì)其實是網(wǎng)絡同步異步阻塞非阻塞之前反正一直搞不清楚同步和阻塞異步和非阻塞的概念總感覺同步就是阻塞異步就是非阻塞的總是搞得暈乎乎的于是就重新查了些資料進行 IO 需要先對 IO 的概念有一定的認識: 我們通常使用php的fopen打開文件關(guān)閉文件讀讀寫寫, 這叫本地文件IO; 而在socket編程中...

    libin19890520 評論0 收藏0
  • 如何理解異步/同步阻塞/阻塞

    摘要:接下來我們就來探討下異步同步與阻塞非阻塞它們其中的區(qū)別。阻塞非阻塞是針對的第一階段的描述。 Author: bugall Wechat: bugallF Email: [email protected] Github: https://github.com/bugall 一: 引言 在面試中我們會碰到這種場景: 面試官:能解釋下什么是同步,異步么? 程序員:假...

    leap_frog 評論0 收藏0
  • 阻塞,阻塞異步,同步

    摘要:出場人物老張,水壺兩把普通水壺,簡稱水壺會響的水壺,簡稱響水壺。同步非阻塞老張還是覺得自己有點傻,于是變高端了,買了把會響笛的那種水壺。所謂阻塞非阻塞,僅僅對于老張而言。 1、例子 老張愛喝茶,廢話不說,煮開水。出場人物:老張,水壺兩把(普通 水壺,簡稱水壺;會響的水壺,簡稱響水壺)。 1 老張把水壺放到火上,立等水開。(同步阻塞) 老張覺得自己有點傻 2 老張把...

    AZmake 評論0 收藏0
  • PHP socket初探 --- 關(guān)于IO的一些枯燥理論

    摘要:原文地址要想更好了解編程,有一個不可繞過的環(huán)節(jié)就是在中,一切皆文件實際上要文件干啥不就是讀寫么所以,這句話本質(zhì)就是才是王道用的打開文件關(guān)閉文件讀讀寫寫,這叫本地文件在編程中,本質(zhì)就是網(wǎng)絡所以,在開始進一步的編程前,我們必須先從概念上認識好 [原文地址:https://blog.ti-node.com/blog...] 要想更好了解socket編程,有一個不可繞過的環(huán)節(jié)就是IO.在Lin...

    sf190404 評論0 收藏0
  • 同步異步、阻塞阻塞

    摘要:轉(zhuǎn)載自在實際應用中,只有三種調(diào)用方式同步阻塞同步非阻塞和異步。同步異步同步和異步關(guān)注的是消息通信機制。當被調(diào)用者獲得結(jié)果,會使用其他方式來通知調(diào)用者,或者通過回調(diào)函數(shù)來處理這個調(diào)用。然后查好了,他會主動打電話給你回調(diào)函數(shù)。 轉(zhuǎn)載自 https://www.zhihu.com/questio... 在實際應用中,只有三種調(diào)用方式:同步-阻塞、同步-非阻塞和異步。 同步 (synchro...

    sPeng 評論0 收藏0

發(fā)表評論

0條評論

tyheist

|高級講師

TA的文章

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