深入JavaScript Day24 - 進(jìn)程與線程、事件循環(huán)溅潜、微任務(wù)隊(duì)列术唬、宏任務(wù)隊(duì)列、promise面試題

一滚澜、進(jìn)程與線程

1粗仓、如何一句話描述操作系統(tǒng)在【硬件】與【軟件】之間的作用?

  • 操作系統(tǒng)是連接【硬件】與【軟件】之間的橋梁

2、分別用一句話描述進(jìn)程和線程借浊?

  • 【進(jìn)程process】進(jìn)程是線程的容器
  • 【線程thread】線程是操作系統(tǒng)運(yùn)行調(diào)度的最小單位
  • 【進(jìn)程】我們可以認(rèn)為塘淑,啟動(dòng)一個(gè)應(yīng)用程序,就會(huì)默認(rèn)啟動(dòng)一個(gè)進(jìn)程(有可能是多個(gè)進(jìn)程)
  • 【線程】每一個(gè)進(jìn)程中蚂斤,都會(huì)至少啟動(dòng)一個(gè)線程來執(zhí)行程序中的代碼存捺,這個(gè)線程就是主線程

3、說一說單核操作系統(tǒng)是如何做到同時(shí)讓多個(gè)進(jìn)程(邊聽歌曙蒸、邊寫代碼捌治、邊查資料)同時(shí)工作呢?

  • CPU的運(yùn)算速度非撑撸快肖油,它可以快速的在多個(gè)進(jìn)程之間迅速切換;
  • 每個(gè)進(jìn)程都會(huì)獲得相應(yīng)的運(yùn)行時(shí)間片臂港,所以有一種同時(shí)運(yùn)行的錯(cuò)覺森枪;

4、打開Chrome瀏覽器审孽,每開一個(gè)tab疲恢,就可以從【活動(dòng)監(jiān)視器】里面觀察到新開了一個(gè)【進(jìn)程】。為什么Chrome要這么設(shè)計(jì)呢瓷胧?

  • 這樣當(dāng)一個(gè)tab打開網(wǎng)頁卡死(可能是死循環(huán)代碼)后,不會(huì)導(dǎo)致整個(gè)Chrome卡死棚愤,不會(huì)影響其他tab的網(wǎng)頁運(yùn)行搓萧。

二、事件循環(huán)宛畦、微任務(wù)瘸洛、宏任務(wù)

1、我們經(jīng)常會(huì)說JavaScript是單線程的次和,那為什么JavaScript處理定時(shí)器反肋、網(wǎng)絡(luò)請(qǐng)求這樣的操作不會(huì)卡死呢?

  • JavaScript是單線程的踏施,但是瀏覽器是多線程的石蔗。
  • JavaScript線程會(huì)把耗時(shí)操作交給其他線程處理(比如定時(shí)器的計(jì)時(shí)操作),等耗時(shí)操作完畢畅形,會(huì)把回調(diào)放入事件循環(huán)隊(duì)列中养距,JavaScript再從循環(huán)隊(duì)列取出回調(diào)進(jìn)行執(zhí)行。
  • 如此形成一個(gè)閉環(huán)日熬,JavaScript線程也不會(huì)被耗時(shí)操作卡死棍厌。
image.png
image.png

2、事件循環(huán)中維護(hù)著哪兩個(gè)隊(duì)列?

  • 【宏任務(wù)隊(duì)列】macrotask queue
  • 【微任務(wù)隊(duì)列】microtask queue
  • 【執(zhí)行順序】在執(zhí)行任何一個(gè)宏任務(wù)前耘纱,都會(huì)先查看并執(zhí)行微任務(wù)隊(duì)列中的任務(wù)敬肚。

3、兩個(gè)隊(duì)列中分別對(duì)應(yīng)放代碼中的哪些API任務(wù)束析?

  • 【宏任務(wù)隊(duì)列】ajax艳馒、setTimeout、setInterval畸陡、DOM監(jiān)聽鹰溜、UI Rendering
  • 【微任務(wù)隊(duì)列】Promis的then回調(diào)、queueMicrotask()

4丁恭、事件循環(huán)對(duì)兩個(gè)對(duì)象的優(yōu)先級(jí)是怎么樣的曹动?

  • ① main script 中的代碼優(yōu)先執(zhí)行(編寫的頂層script代碼)
  • ② 在執(zhí)行任何一個(gè)宏任務(wù)之前,保證微任務(wù)隊(duì)列是空的(優(yōu)先執(zhí)行微任務(wù)隊(duì)列中的任務(wù))

三牲览、面試題

1墓陈、面試題一【掌握】

image.png
setTimeout(() => {
  console.log("setTimeout1");
  new Promise(function (resolve) {
    resolve();
  }).then(function () {
    new Promise(function (resolve) {
      resolve();
    }).then(function () {
      console.log("then4");
    });
    console.log("then2");
  });
});

new Promise(function (resolve) {
  console.log("promise1");
  resolve();
}).then(function () {
  console.log("then1");
});

setTimeout(function () {
  console.log("setTimeout2");
});

console.log(2);

queueMicrotask(() => {
  console.log("queueMicrotask1");
});

new Promise(function (resolve) {
  resolve();
}).then(function () {
  console.log("then3");
});
  • 解法核心
  • ①promise構(gòu)造函數(shù)的代碼,不會(huì)被放在任何隊(duì)列中第献,而是在main script中
  • ②將代碼分三塊進(jìn)行劃分【main script】【微任務(wù)】【宏任務(wù)】
  • ③在執(zhí)行宏任務(wù)之前贡必,一定要清空微任務(wù)隊(duì)列里面的任務(wù)

2、面試題二【掌握】

image.png
async function async1() {
  console.log("async1 start");
  await async2();
  console.log("async1 end");
}

async function async2() {
  console.log("async2");
}

console.log("script start");

setTimeout(() => {
  console.log("setTimeout");
}, 0);

async1();

new Promise(function (resolve) {
  console.log("promise1");
  resolve();
}).then(function () {
  console.log("promise2");
});

console.log("script end");
  • 解法核心
  • ①async里面await后面的函數(shù)庸毫,相當(dāng)于promise的then(理解generator + yeild)

3仔拟、面試題三【太難,忽略】

image.png

4飒赃、node的事件循環(huán)【暫時(shí)跳過吧利花,用到再說】

image.png
image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市载佳,隨后出現(xiàn)的幾起案子炒事,更是在濱河造成了極大的恐慌,老刑警劉巖蔫慧,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挠乳,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡姑躲,警方通過查閱死者的電腦和手機(jī)睡扬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肋联,“玉大人威蕉,你說我怎么就攤上這事¢先裕” “怎么了韧涨?”我有些...
    開封第一講書人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵牍戚,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我虑粥,道長(zhǎng)如孝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任娩贷,我火速辦了婚禮第晰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘彬祖。我一直安慰自己茁瘦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開白布储笑。 她就那樣靜靜地躺著甜熔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪突倍。 梳的紋絲不亂的頭發(fā)上腔稀,一...
    開封第一講書人閱讀 51,578評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音羽历,去河邊找鬼焊虏。 笑死,一個(gè)胖子當(dāng)著我的面吹牛秕磷,可吹牛的內(nèi)容都是我干的诵闭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼澎嚣,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼涂圆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起币叹,我...
    開封第一講書人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎模狭,沒想到半個(gè)月后颈抚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嚼鹉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年贩汉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锚赤。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡匹舞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出线脚,到底是詐尸還是另有隱情赐稽,我是刑警寧澤叫榕,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站姊舵,受9級(jí)特大地震影響晰绎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜括丁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一荞下、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧史飞,春花似錦尖昏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蚯窥,卻和暖如春掸鹅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拦赠。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工巍沙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人荷鼠。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓句携,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親允乐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子矮嫉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容