中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Node.js中Process.nextTick()和Process.setImmediate()有什么區別

發布時間:2022-07-06 10:10:14 來源:億速云 閱讀:119 作者:iii 欄目:開發技術

本篇內容介紹了“Node.js中Process.nextTick()和Process.setImmediate()有什么區別”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

一、Webstrom使用node.jsIDE的問題

在區別這兩個函數之前來說一下Webstrom使用node.jsIDE的問題,在配置Node.js的IDE了,但setImmediate()、require等這些node.js中內置的函數時并不會有提示,要解決這個問題只要設置一下Webstrom,File---->Setting---->Languages&Frameworks------>Node.js and NPM中的Node.js core Library is not enabled設為Enable.

Node.js中Process.nextTick()和Process.setImmediate()有什么區別

二、兩者的區別

1.在理解兩者的區別之前要說一下輪詢

前面博客也有記錄,nodejs中是事件驅動的,有一個循環線程一直從事件隊列中取任務執行或者I/O的操作轉給后臺線程池來操作,把這個循環線程的每次執行的過程算是一次輪詢.

2.setImmediate()的使用

即時計時器立即執行工作,它是在事件輪詢之后執行,為了防止輪詢阻塞,每次只會調用一個。

3.Process.nextTick()的使用

它和setImmediate()執行的順序不一樣,它是在事件輪詢之前執行,為了防止I/O饑餓,所以有一個默認process.maxTickDepth=1000來限制事件隊列的每次循環可執行的nextTick()事件的數目。

4.總結

在網上百度的關于它們的總結:

nextTick()的回調函數執行的優先級要高于setImmediate();

process.nextTick()屬于idle觀察者,setImmediate()屬于check觀察者.在每一輪循環檢查中,idle觀察者先于I/O觀察者,I/O觀察者先于check觀察者.

在具體實現上,process.nextTick()的回調函數保存在一個數組中,
setImmediate()的結果則是保存在鏈表中.
在行為上,process.nextTick()在每輪循環中會將數組中的回調函數全部執行完.
而setImmediate()在每輪循環中執行鏈表中的一個回調函數.

5.代碼demo

//加入2個nextTick()的回調函數
process.nextTick(function(){
    console.log("nextTick延遲執行A");
});
process.nextTick(function(){
    console.log("nextTick延遲執行B");
    setImmediate(function(){
        console.log("setImmediate延遲執行C");
    });
    process.nextTick(function(){
        console.log("nextTick延遲執行D");
    });
});
//加入兩個setImmediate()回調函數
setImmediate(function(){
    console.log("setImmediate延遲執行E");
    process.nextTick(function(){
        console.log("強勢插入F");
    });
    setImmediate(function(){
        console.log("setImmediate延遲執行G");
    });
});
setImmediate(function(){
    console.log("setImmediate延遲執行H");
    process.nextTick(function(){
        console.log("強勢插入I");
    });
    process.nextTick(function(){
        console.log("強勢插入J");
    });
    setImmediate(function(){
        console.log("setImmediate延遲執行K");
    });
});
console.log("正常執行L");

輸出結果:

"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe Immediate.js
正常執行L
nextTick延遲執行A
nextTick延遲執行B
nextTick延遲執行D
setImmediate延遲執行E
setImmediate延遲執行H
setImmediate延遲執行C
強勢插入F
強勢插入I
強勢插入J
setImmediate延遲執行G
setImmediate延遲執行K

Process finished with exit code 0

“Node.js中Process.nextTick()和Process.setImmediate()有什么區別”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

二连浩特市| 平顶山市| 博白县| 湖南省| 宁阳县| 金湖县| 东山县| 邢台县| 洱源县| 永康市| 永仁县| 苏尼特右旗| 凤庆县| 丹东市| 怀化市| 伽师县| 襄汾县| 潮州市| 都匀市| 楚雄市| 西乌| 乌鲁木齐县| 泰顺县| 陆河县| 江孜县| 资阳市| 会东县| 忻城县| 利津县| 阿拉善右旗| 封丘县| 苏尼特右旗| 抚宁县| 剑河县| 青阳县| 秦皇岛市| 略阳县| 荆门市| 呼图壁县| 蓝田县| 土默特左旗|