国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

詳解nodejs異步I/O和事件循環(huán)

2024-05-06 15:16:15
字體:
供稿:網(wǎng)友

事件驅(qū)動模型

現(xiàn)在我們來看看nodejs中的事件驅(qū)動和異步I/O是如何實現(xiàn)的.

nodejs是單線程(single thread)運行的,通過一個事件循環(huán)(event-loop)來循環(huán)取出消息隊列(event-queue)中的消息進行處理,處理過程基本上就是去調(diào)用該消息對應的回調(diào)函數(shù)。消息隊列就是當一個事件狀態(tài)發(fā)生變化時,就將一個消息壓入隊列中。

nodejs的時間驅(qū)動模型一般要注意下面幾個點:

    因為是單線程的,所以當順序執(zhí)行js文件中的代碼的時候,事件循環(huán)是被暫停的。 當js文件執(zhí)行完以后,事件循環(huán)開始運行,并從消息隊列中取出消息,開始執(zhí)行回調(diào)函數(shù) 因為是單線程的,所以當回調(diào)函數(shù)被執(zhí)行的時候,事件循環(huán)是被暫停的 當涉及到I/O操作的時候,nodejs會開一個獨立的線程來進行異步I/O操作,操作結(jié)束以后將消息壓入消息隊列。

下面我們從一個簡單的js文件入手,來看看 nodejs是如何執(zhí)行的。

var fs = require("fs");var debug = require('debug')('example1');debug("begin");fs.readFile('package.json','utf-8',function(err,data){ if(err)   debug(err); else  debug("get file content");});setTimeout(function(){ debug("timeout2");}); debug('end'); // 運行到這里之前,事件循環(huán)是暫停的
    同步執(zhí)行debug("begin") 異步調(diào)用fs.readFile(),此時會開一個新的線程去進行異步I/O操作 異步調(diào)用setTimeout(),馬上將超時信息壓入到消息隊列中 同步調(diào)用debug("end") 開啟事件循環(huán),彈出消息隊列中的信息(目前是超時信息) 然后執(zhí)行信息對應的回調(diào)函數(shù)(事件循環(huán)又被暫停) 回調(diào)函數(shù)執(zhí)行結(jié)束后,開始事件循環(huán)(目前消息隊列中沒有任何東西,文件還沒讀完) 異步I/O讀取文件完畢,將消息壓入消息隊列(消息中含有文件內(nèi)容或者是出錯信息) 事件循環(huán)取得消息,執(zhí)行回調(diào) 程序退出。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持錯新站長站。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 囊谦县| 西安市| 河源市| 黎城县| 渭源县| 青神县| 龙江县| 弋阳县| 卓尼县| 张家口市| 都匀市| 搜索| 南宫市| 柘荣县| 临武县| 长岛县| 讷河市| 麻阳| 娄底市| 方城县| 长海县| 赞皇县| 巫溪县| 杨浦区| 旺苍县| 绥棱县| 昆明市| 上蔡县| 靖江市| 金寨县| 乌拉特后旗| 曲水县| 新竹县| 合山市| 东平县| 台东市| 永和县| 长子县| 房产| 交口县| 新绛县|