1、如題,問一個(gè)js機(jī)制問題,是否都是等主執(zhí)行緒執(zhí)行完畢以後,才執(zhí)行非同步操作。
2、JavaScript 運(yùn)作機(jī)制詳解:再談Event Loop 大部分人都讀過這篇文章,阮老濕說的是:只有主執(zhí)行緒執(zhí)行完畢以後,才會(huì)去讀取任務(wù)佇列。
3、今天聽說了一個(gè)上下文的說法,大概意思是說某個(gè)非同步操作只等和它是同一個(gè)上下文的主執(zhí)行緒執(zhí)行完畢。而不等其他的上下文。今天找了好久,也沒找到類似的文章,請(qǐng)人回答! !
你把很多東西感覺搞混了,還有阮一峰的文章。 。 。批判是閱讀。 。他那文章。 。還有很多概念錯(cuò)誤的。 。
以下是一篇是樸靈的批註:可以參考看一看
樸靈批註版本
nodeJS 官方文件 evenloop process.nextTick timers 關(guān)係
我的理解是node 主執(zhí)行緒跑執(zhí)行緒程式碼,只有檔案I/O,網(wǎng)路I/O,timer才會(huì)是非同步事件,才會(huì)進(jìn)入非同步佇列,平常你寫的程式碼都是同步的,
例如你有一下一段程序
setTimeout(function(){
console.log('test');
},10);//本來應(yīng)該是10ms后輸出test
for(var i=0;i<10000000;i++){
//但是這個(gè)空的for循環(huán)執(zhí)行了50ms
}
//for占住了主線程,倒地timer 事件已經(jīng)到達(dá)觸發(fā)條件,但是主線程被占用
//不能去請(qǐng)求完成的事件隊(duì)列。
//所以test 會(huì)在50ms后輸出
至於那個(gè)上下文的概念,我理解的並不透徹 不知道應(yīng)該算在那一塊裡面,希望大牛給建議。 。歡迎拍磚或踩,請(qǐng)告知錯(cuò)誤的地方。 。嘿