---- 更新一下問題。
那么這種兩種可能性分別在什么情況下才會發(fā)生?
我看了一下阮老師的文章,對于這個問題又有了一些的新的理解:
確實,存在一個默認最小間隔為1ms的問題,那么如果 setImmediate 能夠在1ms來被觸發(fā),就會比 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() 都不在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.
北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內(nèi)教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學校辦產(chǎn)業(yè)為響應國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復興的升級產(chǎn)業(yè)鏈。利用北京大學優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓領(lǐng)域的先行者
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務負責iOS教學及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。