亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

node.js的異步IO 第一篇

feng409 / 3397人閱讀

摘要:給出了解決方案就是單線程,遠(yuǎn)離線程鎖,狀態(tài)同步的問(wèn)題,使用異步讓單線程遠(yuǎn)離阻塞,高效利用。而實(shí)際上的異步是采用了線程池技術(shù),發(fā)起異步時(shí),把操作扔到線程池里面執(zhí)行,然后主線程繼續(xù)執(zhí)行其他操作,執(zhí)行完畢通過(guò)線程間通信通知主線程,主線程執(zhí)行回調(diào)。

異步IO,事件驅(qū)動(dòng),單線程構(gòu)成了node的基調(diào),為什么異步IO在node中如此重要呢?

我們先來(lái)說(shuō)一下異步的概念,異步常見(jiàn)于前端開(kāi)發(fā),例如ajax異步請(qǐng)求資源,如果前端頁(yè)面同步請(qǐng)求資源,那麼當(dāng)我們請(qǐng)求一個(gè)資源的時(shí)候,會(huì)阻塞代碼往下執(zhí)行,直到這個(gè)IO請(qǐng)求結(jié)束,那樣用戶就會(huì)發(fā)現(xiàn)頁(yè)面卡死,點(diǎn)擊事件等等失效,無(wú)疑這會(huì)使用戶流失。

同樣在運(yùn)行服務(wù)端代碼的時(shí)候,如果我們的程序是同步的,那麼面對(duì)來(lái)自客戶端的請(qǐng)求,會(huì)逐個(gè)做出響應(yīng),從而使后面的請(qǐng)求等待時(shí)間很久,在這種場(chǎng)景可以使用多線程并行執(zhí)行,但是多線程編程的缺點(diǎn)是,創(chuàng)建線程,切換線程上下文開(kāi)銷(xiāo)大并且面臨狀態(tài)鎖,狀態(tài)同步等問(wèn)題。使用異步進(jìn)行IO操作,避免了主線程的阻塞高效利用cpu。

node給出了解決方案就是單線程,遠(yuǎn)離線程鎖,狀態(tài)同步的問(wèn)題,使用異步IO讓單線程遠(yuǎn)離阻塞,高效利用cpu。

異步IO與非阻塞IO經(jīng)常放在一起說(shuō),實(shí)際上他們是兩個(gè)不同的概念,上面說(shuō)的是異步IO,那麼什么是阻塞IO,和非阻塞IO呢?

阻塞的IO操作就是發(fā)起IO操作后,線程阻塞等待IO完成,這期間cpu得不到有效利用。

非阻塞IO操作其實(shí)就是發(fā)起IO操作后,通過(guò)事件輪巡,或者事件通知機(jī)制,不斷查詢IO操作是否完成,或者是主線程進(jìn)入休眠等待事件通知IO結(jié)束,然后繼續(xù)向下執(zhí)行代碼,實(shí)際上非阻塞IO期間,cpu要不用來(lái)查詢要不用來(lái)休眠,也沒(méi)有得到有效利用。

而實(shí)際上node的異步IO是采用了線程池技術(shù),發(fā)起異步IO時(shí),把io操作扔到線程池里面執(zhí)行,然后主線程繼續(xù)執(zhí)行其他操作,io執(zhí)行完畢通過(guò)線程間通信通知主線程,主線程執(zhí)行回調(diào)。

另外nix平臺(tái)和windows平臺(tái)下實(shí)現(xiàn)異步io的方案并不相同,nix下node使用自己實(shí)現(xiàn)的線程池模擬異步io,windows下使用IOCP實(shí)現(xiàn)異步io,由于平臺(tái)的差異性,node封裝了libuv層來(lái)兼容不同平臺(tái)。

node異步IO模型

異步調(diào)用
發(fā)起一個(gè)異步調(diào)用
封裝請(qǐng)求對(duì)象,再請(qǐng)求對(duì)象上添加回調(diào)函數(shù)
把請(qǐng)求對(duì)象放入線程池等待執(zhí)行

線程池
線程可用時(shí)執(zhí)行IO操作,把結(jié)果添加到請(qǐng)求對(duì)象上
通知iocp IO完成,歸還線程

事件循環(huán)
創(chuàng)建循環(huán),Tick獲取完成的IO交給IO觀察者
從IO觀察者獲取可用的對(duì)象
用對(duì)象的回調(diào)方法把對(duì)象上的結(jié)果作為參數(shù)執(zhí)行回調(diào)
循環(huán)從IO觀察者獲取可用對(duì)象,和獲取完成的IO加入IO觀察者,沒(méi)有可用對(duì)象時(shí)退出循環(huán)

請(qǐng)求對(duì)象,觀察者,事件循環(huán),線程池構(gòu)成了node的異步IO模型

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

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

相關(guān)文章

  • 前端補(bǔ)集 - 收藏集 - 掘金

    摘要:原文地址一個(gè)非常適合入門(mén)學(xué)習(xí)的博客項(xiàng)目前端掘金一個(gè)非常適合入門(mén)學(xué)習(xí)的項(xiàng)目,代碼清晰結(jié)構(gòu)合理新聞前端掘金介紹一個(gè)由編寫(xiě)的新聞。深入淺出讀書(shū)筆記知乎專(zhuān)欄前端專(zhuān)欄前端掘金去年的一篇老文章,恰好今天專(zhuān)欄開(kāi)通,遷移過(guò)來(lái)。 破解前端面試(80% 應(yīng)聘者不及格系列):從閉包說(shuō)起 - 掘金修訂說(shuō)明:發(fā)布《80% 應(yīng)聘者都不及格的 JS 面試題》之后,全網(wǎng)閱讀量超過(guò) 6W,在知乎、掘金、cnodejs ...

    YorkChen 評(píng)論0 收藏0
  • 前端補(bǔ)集 - 收藏集 - 掘金

    摘要:原文地址一個(gè)非常適合入門(mén)學(xué)習(xí)的博客項(xiàng)目前端掘金一個(gè)非常適合入門(mén)學(xué)習(xí)的項(xiàng)目,代碼清晰結(jié)構(gòu)合理新聞前端掘金介紹一個(gè)由編寫(xiě)的新聞。深入淺出讀書(shū)筆記知乎專(zhuān)欄前端專(zhuān)欄前端掘金去年的一篇老文章,恰好今天專(zhuān)欄開(kāi)通,遷移過(guò)來(lái)。 破解前端面試(80% 應(yīng)聘者不及格系列):從閉包說(shuō)起 - 掘金修訂說(shuō)明:發(fā)布《80% 應(yīng)聘者都不及格的 JS 面試題》之后,全網(wǎng)閱讀量超過(guò) 6W,在知乎、掘金、cnodejs ...

    AbnerMing 評(píng)論0 收藏0
  • FCC 成都社區(qū)·前端周刊 第 5 期

    摘要:發(fā)布一直是數(shù)據(jù)可視化的不錯(cuò)選擇。本次發(fā)布的版本的更新包括使用代替回調(diào)函數(shù),等高線圖和密度圖。詳情發(fā)布該版本更新包括模塊調(diào)整,模塊新增函數(shù)判斷終端是否支持顏色,棄用函數(shù)和等。 01. D3.js 5.0 發(fā)布 D3 一直是 JavaScript 數(shù)據(jù)可視化的不錯(cuò)選擇。本次發(fā)布的 5.0 版本的更新包括:使用 Promise 代替回調(diào)函數(shù),等高線圖和密度圖。 詳情:https://gith...

    mengera88 評(píng)論0 收藏0
  • FCC 成都社區(qū)·前端周刊 第 5 期

    摘要:發(fā)布一直是數(shù)據(jù)可視化的不錯(cuò)選擇。本次發(fā)布的版本的更新包括使用代替回調(diào)函數(shù),等高線圖和密度圖。詳情發(fā)布該版本更新包括模塊調(diào)整,模塊新增函數(shù)判斷終端是否支持顏色,棄用函數(shù)和等。 01. D3.js 5.0 發(fā)布 D3 一直是 JavaScript 數(shù)據(jù)可視化的不錯(cuò)選擇。本次發(fā)布的 5.0 版本的更新包括:使用 Promise 代替回調(diào)函數(shù),等高線圖和密度圖。 詳情:https://gith...

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

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

0條評(píng)論

feng409

|高級(jí)講師

TA的文章

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