国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

?Node.js中的事件循環(huán)是如何工作的

譯文 精選
開發(fā) 前端
根據(jù)Node.js官方網(wǎng)站的說法,事件循環(huán)允許Node.js執(zhí)行非阻塞I/O操作——盡管JavaScript是單線程的——會(huì)盡可能地將操作轉(zhuǎn)移到系統(tǒng)內(nèi)核中。

?譯者 | 盧鑫旺

當(dāng)我們啟動(dòng)一個(gè)Node.js應(yīng)用程序時(shí),它會(huì)加載事件循環(huán)并將必要的回調(diào)函數(shù)添加到回調(diào)棧中。在本文中,你將詳細(xì)了解Node.js中的事件循環(huán)是如何工作的。

一、為什么你應(yīng)該了解Node.js中的事件循環(huán)

以下幾點(diǎn)闡述為什么了解事件循環(huán)很重要:

理解事件循環(huán)的原理有助于你寫出更高效的代碼

當(dāng)你的應(yīng)用程序出現(xiàn)異常錯(cuò)誤時(shí)能幫你更容易地調(diào)試你的代碼

二、什么是事件循環(huán)

根據(jù)Node.js官方網(wǎng)站的說法,事件循環(huán)允許Node.js執(zhí)行非阻塞I/O操作——盡管JavaScript是單線程的——會(huì)盡可能地將操作轉(zhuǎn)移到系統(tǒng)內(nèi)核中。

我們可以把這個(gè)定義分解為三個(gè)關(guān)鍵字:

  • 非阻塞I/O操作
  • 單線程
  • 系統(tǒng)內(nèi)核

1.非阻塞I/O操作

如果一個(gè)操作的執(zhí)行沒有被阻塞,我們就說這個(gè)程序是非阻塞的。既然我們?cè)谶@里提到了非阻塞,那么我們也應(yīng)該提到什么是阻塞。它只是意味著你必須在一個(gè)操作完成后才能再完成另一個(gè)操作。

2.單線程

如果一個(gè)程序只有一個(gè)調(diào)用棧,并且它使用了先進(jìn)先出的概念,在同一個(gè)時(shí)刻只能執(zhí)行一個(gè)任務(wù),那么這個(gè)程序就是單線程的。這意味著棧上的第一個(gè)程序總是在下一個(gè)程序之前運(yùn)行。雖然JavaScript看起來是單線程的語言,不過這只取決于它運(yùn)行的環(huán)境。

3.系統(tǒng)內(nèi)核

在這里,內(nèi)核只是指運(yùn)行程序的操作系統(tǒng)。Javascript是單線程的,但Node.js在執(zhí)行多個(gè)輸入輸出(I/O)操作時(shí)能夠不阻塞線程。它通過盡可能將此操作交給操作系統(tǒng)(例如Linux、Windows、Mac OS X等)來實(shí)現(xiàn)這一點(diǎn)。操作大多被轉(zhuǎn)移到操作系統(tǒng)中;這就是Javascript與Node.js的區(qū)別。

三、Node.js中的事件循環(huán)是如何工作的

當(dāng)我們啟動(dòng)node應(yīng)用程序時(shí),事件循環(huán)立即開始運(yùn)行。事件循環(huán)有多個(gè)階段,每個(gè)階段都有要執(zhí)行的回調(diào)隊(duì)列。當(dāng)事件循環(huán)被添加到特定階段時(shí),它將在該特定階段執(zhí)行一些操作,然后在該階段隊(duì)列中執(zhí)行一些回調(diào)。

這將一直持續(xù)到隊(duì)列為空或已經(jīng)執(zhí)行了最大數(shù)量的回調(diào)函數(shù)。當(dāng)達(dá)到限制時(shí),事件循環(huán)會(huì)進(jìn)入下一階段執(zhí)行相同的操作。

有四個(gè)最重要的階段:

  • 到期時(shí)間回調(diào)
  • I/O輪詢和回調(diào)
  • setImmediate回調(diào)
  • close回調(diào)

1.到期時(shí)間回調(diào)

該階段負(fù)責(zé)處理過期定時(shí)器的回調(diào)函數(shù)。

舉例:

setTimeout (()=> console.log ('expired timers'), 1000)

是一個(gè)函數(shù),它設(shè)置了一個(gè)在一定時(shí)間后過期的定時(shí)器。

因此,如果這個(gè)定時(shí)器有回調(diào)函數(shù)的話,那么它們將是事件循環(huán)首先處理的函數(shù)。

如果計(jì)時(shí)器稍后到期,在處理其他某個(gè)階段的時(shí)間內(nèi),則只有當(dāng)事件循環(huán)返回到第一階段時(shí),才會(huì)調(diào)用該計(jì)時(shí)器的回調(diào)。它在所有四個(gè)階段都是這樣工作的。

2.I/O輪詢和回調(diào)

輪詢基本上意味著搜索準(zhǔn)備好處理的新I/O事件,并將其放入回調(diào)隊(duì)列。理解在Node應(yīng)用程序的上下文中,I/O只是指網(wǎng)絡(luò)和文件訪問之類的事情,這一點(diǎn)至關(guān)重要。

舉例:

fs.readFile('file.txt', (e, d)) =>

console.log(‘File read’)

})

在這個(gè)階段,99%的代碼都會(huì)被執(zhí)行,因?yàn)樵诘湫偷腘ode應(yīng)用程序中,我們需要做的大部分工作都與網(wǎng)絡(luò)和讀取文件有關(guān)。

3.setImmediate回調(diào)

如果我們想在輪詢和執(zhí)行階段的I/O之后立即處理回調(diào),我們使用這個(gè)特殊的計(jì)時(shí)器。這在一些更高級(jí)的情況下可能是重要的。

setImmediate(() => setImmediate(() =>

console.log('immediate');

});

4.close回調(diào)

在這個(gè)階段,所有的close關(guān)閉事件都會(huì)被處理,例如,當(dāng)一個(gè)Web服務(wù)器關(guān)閉時(shí)。這就完成了事件循環(huán)的第四個(gè)階段。

注意:Node.js事件循環(huán)內(nèi)部還使用了其他事件,但就本文而言,以上四個(gè)事件對(duì)我們來說是至關(guān)重要的。

如上所述,我們完成了這個(gè)過程,這只是事件循環(huán)中的一個(gè)周期。循環(huán)結(jié)束后,Node.js決定是繼續(xù)循環(huán)還是退出循環(huán)。

Node只是通過檢查是否有任務(wù)(例如定時(shí)器或I/0任務(wù))仍然在后臺(tái)運(yùn)行來做到這一點(diǎn)。如果沒有,它就會(huì)退出應(yīng)用程序。如果有待處理的任務(wù),它們會(huì)繼續(xù)處理下一個(gè)任務(wù),例如處理HTTP請(qǐng)求或讀取文件。

這基本上就是Node事件循環(huán)的全部內(nèi)容。

四、避免阻塞事件循環(huán)

因?yàn)镹ode.js中的所有內(nèi)容最終都運(yùn)行在單個(gè)線程中,你可以讓數(shù)百萬用戶同時(shí)訪問同一個(gè)池,這使得Nde.js非常輕量級(jí)和可擴(kuò)展。但與此同時(shí),它有阻塞單個(gè)線程的危險(xiǎn),這將使整個(gè)應(yīng)用程序變慢,甚至停止應(yīng)用程序。

五、避免阻塞事件循環(huán)的一些準(zhǔn)則

作為開發(fā)人員,你有責(zé)任避免事件循環(huán)的阻塞。下面的這些準(zhǔn)則可以幫助你避免阻塞事件循環(huán)。

  • 不要在回調(diào)函數(shù)中使用fs、crypto和Zlib模塊中函數(shù)的同步版本。
  • 處理較大的對(duì)象時(shí),使用JSON時(shí)要小心。
  • 不要使用過于復(fù)雜的正則表達(dá)式(例如,嵌套的量詞)。
  • 不要在嵌套對(duì)象上執(zhí)行復(fù)雜的計(jì)算。

六、關(guān)于Node.js事件循環(huán)的最后思考

事件循環(huán)使Node.js中的異步編程成為可能。這使得它成為Node設(shè)計(jì)中最重要的特性。這使得Node.js與其他平臺(tái)完全不同。

它負(fù)責(zé)處理所有傳入的事件,并通過將較重的任務(wù)轉(zhuǎn)到線程池并自己執(zhí)行最簡單的工作來執(zhí)行編排。

原文鏈接:https://hackernoon.com/how-do-event-loops-in-nodejs-work

譯者介紹

盧鑫旺,51CTO社區(qū)編輯,編程語言愛好者,對(duì)數(shù)據(jù)庫,架構(gòu),云原生有濃厚興趣。?

責(zé)任編輯:武曉燕 來源: 51CTO技術(shù)棧
相關(guān)推薦

2021-05-27 09:00:00

Node.js開發(fā)線程

2024-01-05 08:49:15

Node.js異步編程

2021-10-22 08:29:14

JavaScript事件循環(huán)

2021-12-18 07:42:15

Ebpf 監(jiān)控 Node.js

2012-02-03 09:25:39

Node.js

2011-09-08 14:16:12

Node.js

2011-09-08 13:46:14

node.js

2021-06-10 07:51:07

Node.js循環(huán)機(jī)制

2023-03-02 23:09:53

Node.jsC++JS

2023-10-04 07:35:03

2011-09-02 14:47:48

Node

2020-01-03 16:04:10

Node.js內(nèi)存泄漏

2021-12-08 07:55:41

EventLoop瀏覽器事件

2011-09-09 14:23:13

Node.js

2022-09-04 15:54:10

Node.jsAPI技巧

2016-08-11 14:02:02

NodeJS前端

2021-05-21 09:36:42

開發(fā)技能代碼

2020-04-15 15:48:03

Node.jsstream前端

2018-10-19 07:37:07

2020-05-29 15:33:28

Node.js框架JavaScript
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

深夜在线视频| 国产欧美大片| 欧美日韩国产小视频| 可以免费在线看黄的网站| 亚洲91中文字幕无线码三区| 久久精品国产91精品亚洲| 草草影院在线观看| 国产精品情趣视频| 性做爰过程免费播放| 欧美粗暴jizz性欧美20| 午夜精品久久久久久久男人的天堂| 在线欧美三级| 欧美午夜女人视频在线| 中文字幕亚洲乱码| 菠萝蜜视频在线观看一区| 欧美二区在线| 欧美国产三区| 国产精品视频导航| 哺乳挤奶一区二区三区免费看| 亚洲男人天堂九九视频| 午夜激情视频在线| 欧美日韩另类在线| 天堂社区日本电影超碰| 国产欧美日韩不卡| 国产精品久久中文字幕| 美日韩一级片在线观看| 国产亚洲欧美另类一区二区三区 | 国产 porn| 国产在线视视频有精品| 精品一卡二卡三卡四卡日本乱码| 青青草国产成人a∨下载安卓| 欧美激情在线有限公司| 久久天天久久| 日韩资源在线观看| 成人黄色免费网站| 在线观看欧美日韩| 99只有精品| 国产一区二区久久精品| h片在线观看下载| 日韩一区二区免费在线电影| 日本在线免费看| 欧美日韩aaaaa| 91精品国产91久久久久游泳池 | 波多野结衣天堂| 懂色中文一区二区在线播放| 中文字幕欧美日韩一区二区| 模特精品在线| 免费av一区二区三区| 亚洲欧美日韩国产一区| 国产精品我不卡| 亚洲精品欧洲| 精品久久久久久乱码天堂| 国产综合网站| 精品无码久久久久国产| 乱人伦精品视频在线观看| 性欧美精品一区二区三区在线播放| 日本美女视频一区二区| 中文字幕久久一区| 成人午夜av电影| 亚洲熟女乱色一区二区三区| 国产欧美日韩卡一| 1024在线视频| 欧美丝袜第三区| 久久免费电影| 久久精品国产v日韩v亚洲| 午夜久久av| 国产美女精品视频| 亚洲国产美女| 超碰97免费观看| 久久久久久久久久久久久夜| 久久国产情侣| 欧美日韩国产片| 桃子视频成人app| 欧美在线视频a| 日韩五码在线| 水蜜桃色314在线观看| 亚洲精品中文字幕乱码三区 | 久久99精品久久只有精品| 九九爱精品视频| 亚洲女人的天堂| 免费日本一区二区三区视频| 一区二区三区天堂av| 色综合www| 欧美日韩免费观看一区| 99re免费视频精品全部| 男女激情视频网站| 欧美电影免费提供在线观看| avtt久久| 亚洲影影院av| 成人国产精品免费观看动漫| 午夜在线不卡| 亚洲精品久久久一区二区三区 | 天堂在线中文网官网| 欧美激情第99页| 亚洲无线视频| 久久精品国产精品亚洲色婷婷| 精品久久久久国产| 一个人看的www视频在线免费观看 一个人www视频在线免费观看 | 久久人体大尺度| 国产精品白丝久久av网站| 日韩一级片网址| 99精品国自产在线| 最新亚洲国产精品| 成人伊人222| 五月婷婷综合在线| 性欧美又大又长又硬| 国产精品视频资源| 亚洲人精品午夜| 人人香蕉久久| 濑亚美莉一二区在线视频| 成人性做爰片免费视频| 国内精品美女在线观看| 女厕嘘嘘一区二区在线播放 | 欧美黄色大片网站| 在线成人性视频| 亚洲婷婷综合久久一本伊一区| a级影片在线| 26uuu国产精品视频| 精品午夜久久福利影院| 黄页大全在线免费观看| 久久久国产精品x99av| 国产一区二区三区四区三区四| 日韩免费视频播放| 制服丝袜在线91| 成人综合专区| 精品久久久久久无码国产| 亚洲精品一区二区三区在线观看 | 日韩欧美亚洲另类制服综合在线| 国产女人18毛片水真多18精品| 一区二区三区四区视频在线观看| 懂色av一区二区三区| 亚洲不卡在线| www.日本少妇| 精品999在线播放| 午夜天堂精品久久久久| av高清在线| 欧美大片欧美激情性色a∨久久| 日本不卡视频在线观看| 日韩精品视频在线观看一区二区三区| 久久国产色av| 国产iv一区二区三区| 欧美aaaaaaa| 国产精品欧美久久| 亚洲午夜精品在线| 久草精品视频| 成人性做爰aaa片免费看不忠| 亚洲色在线视频| 免费不卡在线观看| 国产福利视频在线| 久久艹中文字幕| 色久综合一二码| 97精品中文字幕| 欧美激情图区| 91成人免费观看网站| 国产亚洲精品福利| 国产伦精品一区二区三区视频金莲| 狠狠色噜噜狠狠狠狠色吗综合| 欧美日韩免费在线观看| 少妇精品久久久一区二区| av毛片免费看| 国产精品久久久久久av福利软件 | 理论电影国产精品| 日韩特级毛片| 亚洲精品一区二区三区樱花| 日韩女优av电影在线观看| 免费亚洲网站| 免费网站在线观看人| 亚洲欧美日本国产有色| 9999精品成人免费毛片在线看| 精品三级在线观看| 久久精品国产一区二区三| 免费看电影在线| 小说区视频区图片区| 中文字幕欧美亚洲| 久久久国产一区二区三区四区小说| 亚洲成人影音| 在线影院自拍| 久久riav二区三区| 亚洲精品自拍偷拍| 久久综合国产精品| 亚洲自拍都市欧美小说| 新版中文字幕在线资源| 成人在线免费网站| 欧美tickling挠脚心丨vk| 国产麻豆精品在线观看| 国产高清亚洲| 如如影视在线观看经典| 黑人中文字幕一区二区三区| 亚洲国产欧美在线成人app| 成人动漫精品一区二区| 国内毛片久久| 欧洲伦理片一区 二区 三区| 久久婷婷开心| 色av中文字幕一区| 夜夜操天天操亚洲| 午夜在线观看免费一区| 日韩黄色在线| 在线视频se| 国产欧美自拍视频| 91高清视频免费观看|