參考鏈接
原文點(diǎn)這
點(diǎn)我
這里講的特別好
異步, 同步, 阻塞, 非阻塞
例如普通B/S模式(同步):提交請(qǐng)求->等待服務(wù)器處理->處理完畢返回 這里的是指你提交了一個(gè)請(qǐng)求,并沒有立即返回, 要等到服務(wù)器處理完成后, *連帶著返回值一起返回了* 例如 ajax請(qǐng)求(異步): 請(qǐng)求通過事件觸發(fā)->服務(wù)器處理->處理完畢。 這個(gè)過程是你觸發(fā)了事件后,服務(wù)端立即返回, *但是是不帶返回值的*, 然后當(dāng)服務(wù)端處理完這件事情后, 通過回掉, promise 等各種方式通知你這個(gè)返回值。 通俗一點(diǎn)的例子: 同步:你去樓下拿快遞,然后快遞小哥說我?guī)湍阏艺遥?在這過程中你一直等著,直到他找到你的快遞連同快遞一起返回。 異步:你去樓下拿快遞,快遞小哥說我?guī)湍阏遥业酱螂娫捦ㄖ悖?你該干嘛干嘛去。 阻塞和非阻塞 可以這么理解 阻塞就是當(dāng)你拿快遞的時(shí)候, 進(jìn)程掛起了,你什么也干不了,只能等著快遞小哥告訴你答案你才能去做你的事情. *非阻塞是指,你的read操作立即返回了,但是沒有帶數(shù)據(jù). 可以通過 輪詢 來實(shí)現(xiàn)非阻塞I/O的獲取完完整數(shù)據(jù)的要求,但是對(duì)于應(yīng)用程序來說,他任是一種同步, 因?yàn)槌绦蛉稳恍枰菼O完全返回,等待的時(shí)間,cpu要么用于遍歷文件描述符的狀態(tài),要么用于休眠等待事件發(fā)生.* 講到這里我們知道js 是單線程的.js的主要用途是與用戶交互,以及操作DOM. *JavaScript的單線程,與它的用途有關(guān)。作為瀏覽器腳本語言,JavaScript的主要用途是與用戶互動(dòng),以及操作DOM。這決定了它只能是單線程,否則會(huì)帶來很復(fù)雜的同步問題。比如,假定JavaScript同時(shí)有兩個(gè)線程,一個(gè)線程在某個(gè)DOM節(jié)點(diǎn)上添加內(nèi)容,另一個(gè)線程刪除了這個(gè)節(jié)點(diǎn),這時(shí)瀏覽器應(yīng)該以哪個(gè)線程為準(zhǔn)?*(摘自阮老師的博客) 單線程意味著同一時(shí)間只能進(jìn)行一件事情,前面的事情結(jié)束才能執(zhí)行后面的事件.當(dāng)碰到需要時(shí)間的IO事件的時(shí)候問題就來了,必須等到這些結(jié)束后才往下進(jìn)行,但這時(shí)CPU是閑著的.這樣浪費(fèi)了很多計(jì)算機(jī)的性能. JavaScript語言的設(shè)計(jì)者意識(shí)到,這時(shí)主線程完全可以不管IO設(shè)備,掛起處于等待中的任務(wù),先運(yùn)行排在后面的任務(wù)。等到IO設(shè)備返回了結(jié)果,再回過頭,把掛起的任務(wù)繼續(xù)執(zhí)行下去. ***于是,所有任務(wù)可以分成兩種,一種是同步任務(wù)(synchronous),另一種是異步任務(wù)(asynchronous)。同步任務(wù)指的是,在主線程上排隊(duì)執(zhí)行的任務(wù),只有前一個(gè)任務(wù)執(zhí)行完畢,才能執(zhí)行后一個(gè)任務(wù);異步任務(wù)指的是,不進(jìn)入主線程、而進(jìn)入"任務(wù)隊(duì)列"(task queue)的任務(wù),只有"任務(wù)隊(duì)列"通知主線程,某個(gè)異步任務(wù)可以執(zhí)行了,該任務(wù)才會(huì)進(jìn)入主線程執(zhí)行。*** (1)所有同步任務(wù)都在主線程上執(zhí)行,形成一個(gè)執(zhí)行棧(execution context stack)。 (2)主線程之外,還存在一個(gè)"任務(wù)隊(duì)列"(task queue)。只要異步任務(wù)有了運(yùn)行結(jié)果,就在"任務(wù)隊(duì)列"之中放置一個(gè)事件。 (3)一旦"執(zhí)行棧"中的所有同步任務(wù)執(zhí)行完畢,系統(tǒng)就會(huì)讀取"任務(wù)隊(duì)列",看看里面有哪些事件。那些對(duì)應(yīng)的異步任務(wù),于是結(jié)束等待狀態(tài),進(jìn)入執(zhí)行棧,開始執(zhí)行。 (4)主線程不斷重復(fù)上面的第三步。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/91040.html
摘要:需要先對(duì)的概念有一定的認(rèn)識(shí)我們通常使用的打開文件關(guān)閉文件讀讀寫寫這叫本地文件而在編程中本質(zhì)其實(shí)是網(wǎng)絡(luò)同步異步阻塞非阻塞之前反正一直搞不清楚同步和阻塞異步和非阻塞的概念總感覺同步就是阻塞異步就是非阻塞的總是搞得暈乎乎的于是就重新查了些資料進(jìn)行 IO 需要先對(duì) IO 的概念有一定的認(rèn)識(shí): 我們通常使用php的fopen打開文件關(guān)閉文件讀讀寫寫, 這叫本地文件IO; 而在socket編程中...
摘要:接下來我們就來探討下異步同步與阻塞非阻塞它們其中的區(qū)別。阻塞非阻塞是針對(duì)的第一階段的描述。 Author: bugall Wechat: bugallF Email: 769088641@qq.com Github: https://github.com/bugall 一: 引言 在面試中我們會(huì)碰到這種場景: 面試官:能解釋下什么是同步,異步么? 程序員:假...
摘要:出場人物老張,水壺兩把普通水壺,簡稱水壺會(huì)響的水壺,簡稱響水壺。同步非阻塞老張還是覺得自己有點(diǎn)傻,于是變高端了,買了把會(huì)響笛的那種水壺。所謂阻塞非阻塞,僅僅對(duì)于老張而言。 1、例子 老張愛喝茶,廢話不說,煮開水。出場人物:老張,水壺兩把(普通 水壺,簡稱水壺;會(huì)響的水壺,簡稱響水壺)。 1 老張把水壺放到火上,立等水開。(同步阻塞) 老張覺得自己有點(diǎn)傻 2 老張把...
摘要:原文地址要想更好了解編程,有一個(gè)不可繞過的環(huán)節(jié)就是在中,一切皆文件實(shí)際上要文件干啥不就是讀寫么所以,這句話本質(zhì)就是才是王道用的打開文件關(guān)閉文件讀讀寫寫,這叫本地文件在編程中,本質(zhì)就是網(wǎng)絡(luò)所以,在開始進(jìn)一步的編程前,我們必須先從概念上認(rèn)識(shí)好 [原文地址:https://blog.ti-node.com/blog...] 要想更好了解socket編程,有一個(gè)不可繞過的環(huán)節(jié)就是IO.在Lin...
摘要:轉(zhuǎn)載自在實(shí)際應(yīng)用中,只有三種調(diào)用方式同步阻塞同步非阻塞和異步。同步異步同步和異步關(guān)注的是消息通信機(jī)制。當(dāng)被調(diào)用者獲得結(jié)果,會(huì)使用其他方式來通知調(diào)用者,或者通過回調(diào)函數(shù)來處理這個(gè)調(diào)用。然后查好了,他會(huì)主動(dòng)打電話給你回調(diào)函數(shù)。 轉(zhuǎn)載自 https://www.zhihu.com/questio... 在實(shí)際應(yīng)用中,只有三種調(diào)用方式:同步-阻塞、同步-非阻塞和異步。 同步 (synchro...
閱讀 5287·2021-09-22 15:50
閱讀 1875·2021-09-02 15:15
閱讀 1173·2019-08-29 12:49
閱讀 2552·2019-08-26 13:31
閱讀 3469·2019-08-26 12:09
閱讀 1218·2019-08-23 18:17
閱讀 2745·2019-08-23 17:56
閱讀 2936·2019-08-23 16:02