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

資訊專欄INFORMATION COLUMN

node.js的異步IO 第一篇

feng409 / 3354人閱讀

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

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

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

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

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

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

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

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

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

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

node異步IO模型

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

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

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

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

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

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

相關(guān)文章

  • 前端補集 - 收藏集 - 掘金

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

    YorkChen 評論0 收藏0
  • 前端補集 - 收藏集 - 掘金

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

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

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

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

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

    Jinkey 評論0 收藏0

發(fā)表評論

0條評論

feng409

|高級講師

TA的文章

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