在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/網(wǎng)絡安全  HTML/ node 文檔找提到 setTimeout/setImmediate 返回結(jié)果的

node 文檔找提到 setTimeout/setImmediate 返回結(jié)果的順序不一定。 那么兩種可能性的分別是怎樣的?

參考鏈接

---- 更新一下問題。

那么這種兩種可能性分別在什么情況下才會發(fā)生?

我看了一下阮老師的文章,對于這個問題又有了一些的新的理解:

clipboard.png

  1. 在主進程中, setTimeout 和 setImmediate 執(zhí)行的先后問題,
clipboard.png
確實,存在一個默認最小間隔為1ms的問題,那么如果 setImmediate 能夠在1ms來被觸發(fā),就會比 setTimeout 快。
  1. 為什么在 i/o cycle 中, setImmediate 一定比 setTimeout 快?

因為在執(zhí)行 i/o cycle 過程中, 進入了 poll phase,執(zhí)行其 回調(diào)函數(shù)中的代碼,分別遇到了 setTimeout 和 setImmediate。此時的 poll phase 的隊列尚為被清空,還有一個函數(shù)在里面(執(zhí)行中)。當這個函數(shù)結(jié)束的時候,整個event loop 中剛剛通過 setImmediate 注冊了一個回調(diào),所以就會繼續(xù)到 check phase。 這也是為什么
Timers phase 在 check phase 前面,但是 setImmediate 卻在一定會在 setTimeout 前面執(zhí)行(同一i/o cycle 時)。

當然以上是我個人的理解。

在看了 @改名字很傷神 推薦的 nodejs中的event loop 后,覺得自己的基礎功還是不扎實,沒有辦法更加深入的去理解問題,汗顏。

同時,歡迎大家就我的看法做指正。

回答
編輯回答
夏夕
setTimeout/setImmediate 返回結(jié)果的順序不一定。 那么兩種可能性的分別是怎樣的?

那當然,你都沒法保證是不是同一次輪詢(你可能是問這個?)。這就是為什么后面要加fs.readFile。

2018年8月31日 07:51
編輯回答
安若晴

我自己也來回答一下,雖然是我自己問的。

這個問題放在node下面來看的話,可以這么理解,

setTimeout 和 setImmediate 這兩個函數(shù)不存在誰前誰后的關(guān)系,只不過在 node 的 event loop 下,

兩者分屬不同的階段(phase):

setTimeout -> timer

setImmediate -> check

這兩個階段在同一個 Loop 中確實有先后關(guān)系,但是如果是多個 Loop 則不存在先后關(guān)系。

2018年1月21日 21:19
編輯回答
維她命

文檔寫得很明白,當setTimeout() 和 setImmediate() 都不在I/O cycle (讀寫周期)內(nèi),它們的執(zhí)行順序會受到程序的性能影響而變得不確定。

For example, if we run the following script which is not within an I/O
cycle (i.e. the main module), the order in which the two timers are
executed is non-deterministic, as it is bound by the performance of
the process.

但是,如個它們都在I/O cycle內(nèi),則不管有多少個setTimeout(),setImmediate()永遠先執(zhí)行,這同時是setImmediate()的優(yōu)勢。

The main advantage to using setImmediate() over setTimeout() is
setImmediate() will always be executed before any timers if scheduled
within an I/O cycle, independently of how many timers are present.

參考鏈接

2017年6月26日 07:28