亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

node.js中的定時器nextTick()和setImmediate()區(qū)別分析

 更新時間:2014年11月26日 16:16:24   投稿:hebedich  
本文介紹了node.js中的定時器nextTick()和setImmediate()的區(qū)別分析,非常的不錯,這里推薦給大家。

1.node中使用定時器的問題在于,它并非精確的.譬如setTimeout()設定一個任務在10ms后執(zhí)行,但是在9ms后,有一個任務占用了5ms,再次輪到定時器時,已經(jīng)耽誤了4ms.

好了node中的定時器就簡單的講這么多.

2.看代碼:

復制代碼 代碼如下:

process.nextTick(function(){
    console.log("延遲執(zhí)行");
});
console.log("正常執(zhí)行1");
console.log("正常執(zhí)行2");
console.log("正常執(zhí)行3");
console.log("正常執(zhí)行4");

通過這個例子,我想大家很清楚的就能看到nextTick()是用來干嘛的了.主要是用來異步執(zhí)行的.

在看代碼:

復制代碼 代碼如下:

 setImmediate(function(){
     console.log("延遲執(zhí)行");
 });
 console.log("正常執(zhí)行");

我們發(fā)現(xiàn)setImmediate也是異步執(zhí)行的.奇怪了

那么它與nextTick()有什么區(qū)別呢?

看代碼:

代碼一:

復制代碼 代碼如下:

process.nextTick(function(){
    console.log("nextTick延遲")
});
setImmediate(function(){
    console.log("setImmediate延遲");
});
console.log("正常執(zhí)行");

結果:

代碼二:

復制代碼 代碼如下:

setImmediate(function(){
    console.log("setImmediate延遲");
});
process.nextTick(function(){
    console.log("nextTick延遲")
});
console.log("正常執(zhí)行");

結果:

發(fā)現(xiàn)代碼雖然順序不一樣,但是執(zhí)行的結果是一樣的.

從結果可以發(fā)現(xiàn):

nextTick()的回調(diào)函數(shù)執(zhí)行的優(yōu)先級要高于setImmediate();

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

在具體實現(xiàn)上,process.nextTick()的回調(diào)函數(shù)保存在一個數(shù)組中,
setImmediate()的結果則是保存在鏈表中.
在行為上,process.nextTick()在每輪循環(huán)中會將數(shù)組中的回調(diào)函數(shù)全部執(zhí)行完.
而setImmediate()在每輪循環(huán)中執(zhí)行鏈表中的一個回調(diào)函數(shù).

復制代碼 代碼如下:

//加入2個nextTick()的回調(diào)函數(shù)
process.nextTick(function(){
    console.log("nextTick延遲執(zhí)行1");
});
process.nextTick(function(){
    console.log("nextTick延遲執(zhí)行2");
});
//加入兩個setImmediate()回調(diào)函數(shù)
setImmediate(function(){
    console.log("setImmediate延遲執(zhí)行1");
    process.nextTick(function(){
        console.log("強勢插入");
    });
});
setImmediate(function(){
    console.log("setImmediate延遲執(zhí)行2");
});
console.log("正常執(zhí)行");

從執(zhí)行結果上看出:當?shù)谝粋€setImmediate()的回調(diào)函數(shù)執(zhí)行完后,并沒有立即執(zhí)行第二個,而是進入了下一輪循環(huán),再次按nextTick()優(yōu)先,setImmediate()次后的順序執(zhí)行.之所以這樣設計,是為了保證每次循環(huán)能夠較快的執(zhí)行結束.防止CPU占用過多而阻塞后續(xù)I/O調(diào)用的情況.

以上就是相關node.js中的定時器nextTick()和setImmediate()區(qū)別的資料了,小伙伴們是否清楚了他們之間的區(qū)別了呢?

相關文章

  • pnpm workspace管理monorepo項目使用過程詳解

    pnpm workspace管理monorepo項目使用過程詳解

    這篇文章主要為大家介紹了pnpm workspace管理monorepo項目使用過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • 詳解nodeJS中讀寫文件方法的區(qū)別

    詳解nodeJS中讀寫文件方法的區(qū)別

    本篇文章主要介紹了詳解nodeJS中讀寫文件方法的區(qū)別,nodejs的fs模塊針對讀操作為我們提供了readFile,read, createReadStream三個方法,有興趣的可以了解一下。
    2017-03-03
  • Nodejs?http模塊返回內(nèi)容中文亂碼問題及解決

    Nodejs?http模塊返回內(nèi)容中文亂碼問題及解決

    這篇文章主要介紹了Nodejs?http模塊返回內(nèi)容中文亂碼問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 使用Node.js實現(xiàn)一個多人游戲服務器引擎

    使用Node.js實現(xiàn)一個多人游戲服務器引擎

    這篇文章主要給大家介紹了關于如何使用Node.js實現(xiàn)一個多人游戲服務器引擎的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用Node.js具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-03-03
  • express的中間件bodyParser詳解

    express的中間件bodyParser詳解

    這篇文章主要介紹了node.js中express的中間件bodyParser的使用方法,需要的朋友可以參考下
    2014-12-12
  • Node.js中.pfx后綴文件的處理方法

    Node.js中.pfx后綴文件的處理方法

    這篇文章主要介紹了Node.js中.pfx后綴文件的處理方法,文中介紹的很詳細,對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-03-03
  • 基于Node.js的大文件分片上傳示例

    基于Node.js的大文件分片上傳示例

    這篇文章主要介紹了基于Node.js的大文件分片上傳示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-06-06
  • Node.js readline模塊與util模塊的使用

    Node.js readline模塊與util模塊的使用

    本篇文章主要介紹了Node.js readline模塊與util模塊的使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • node.js 中間件express-session使用詳解

    node.js 中間件express-session使用詳解

    這篇文章主要給大家介紹了node.js中間件express-session使用的相關資料,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-05-05
  • ubuntu下安裝nodejs以及升級的辦法

    ubuntu下安裝nodejs以及升級的辦法

    本文介紹了ubuntu 12.04服務器安裝nodejs以及升級的方法,ubuntu安裝nodejs以及升級的實例教程,需要的朋友參考下。
    2015-05-05

最新評論