進(jìn)程與線程
1.?進(jìn)程:程序的一次執(zhí)行,?它占有一片獨(dú)有的內(nèi)存空間
2.?線程:?CPU的基本調(diào)度單位,?是程序執(zhí)行的一個(gè)完整流程
3.?進(jìn)程與線程
??*?一個(gè)進(jìn)程中一般至少有一個(gè)運(yùn)行的線程:?主線程
??*?一個(gè)進(jìn)程中也可以同時(shí)運(yùn)行多個(gè)線程,?我們會(huì)說(shuō)程序是多線程運(yùn)行的
??*?一個(gè)進(jìn)程內(nèi)的數(shù)據(jù)可以供其中的多個(gè)線程直接共享
??*?多個(gè)進(jìn)程之間的數(shù)據(jù)是不能直接共享的
4.?瀏覽器運(yùn)行是單進(jìn)程還是多進(jìn)程?
??*?有的是單進(jìn)程
????*?firefox
????*?老版IE
??*?有的是多進(jìn)程
????*?chrome
????*?新版IE
5.?如何查看瀏覽器是否是多進(jìn)程運(yùn)行的呢?
??*?任務(wù)管理器==>進(jìn)程
6.?瀏覽器運(yùn)行是單線程還是多線程?
??*?都是多線程運(yùn)行的
瀏覽器內(nèi)核
什么是瀏覽器內(nèi)核?
??*?支持瀏覽器運(yùn)行的最核心的程序
2.?不同的瀏覽器可能不太一樣
??*?Chrome,?Safari:?webkit
??*?firefox:?Gecko
??*?IE:?Trident
??*?360,搜狗等國(guó)內(nèi)瀏覽器:?Trident?+?webkit
3.?內(nèi)核由很多模塊組成
??*?html,css文檔解析模塊?:?負(fù)責(zé)頁(yè)面文本的解析
??*?dom/css模塊?:?負(fù)責(zé)dom/css在內(nèi)存中的相關(guān)處理
??*?布局和渲染模塊?:?負(fù)責(zé)頁(yè)面的布局和效果的繪制
??*?定時(shí)器模塊?:?負(fù)責(zé)定時(shí)器的管理
??*?網(wǎng)絡(luò)請(qǐng)求模塊?:?負(fù)責(zé)服務(wù)器請(qǐng)求(常規(guī)/Ajax)
??*?事件響應(yīng)模塊?:?負(fù)責(zé)事件的管理
JS是單線程的
1.?如何證明js執(zhí)行是單線程的?
??*?setTimeout()的回調(diào)函數(shù)是在主線程執(zhí)行的
??*?定時(shí)器回調(diào)函數(shù)只有在運(yùn)行棧中的代碼全部執(zhí)行完后才有可能執(zhí)行
2.?為什么js要用單線程模式,?而不用多線程模式?
??*?JavaScript的單線程梆造,與它的用途有關(guān)葬毫。
??*?作為瀏覽器腳本語(yǔ)言,JavaScript的主要用途是與用戶互動(dòng)贴捡,以及操作DOM。
??*?這決定了它只能是單線程屹逛,否則會(huì)帶來(lái)很復(fù)雜的同步問(wèn)題
3.?代碼的分類:
??*?初始化代碼
??*?回調(diào)代碼
4.?js引擎執(zhí)行代碼的基本流程
??*?先執(zhí)行初始化代碼:?包含一些特別的代碼???回調(diào)函數(shù)(異步執(zhí)行)
????*?設(shè)置定時(shí)器
????*?綁定事件監(jiān)聽(tīng)
????*?發(fā)送ajax請(qǐng)求
??*?后面在某個(gè)時(shí)刻才會(huì)執(zhí)行回調(diào)代碼
事件循環(huán)模型
1.?所有代碼分類
??*?初始化執(zhí)行代碼(同步代碼):?包含綁定dom事件監(jiān)聽(tīng),?設(shè)置定時(shí)器,?發(fā)送ajax請(qǐng)求的代碼
??*?回調(diào)執(zhí)行代碼(異步代碼):?處理回調(diào)邏輯
2.?js引擎執(zhí)行代碼的基本流程:
??*?初始化代碼===>回調(diào)代碼
3.?模型的2個(gè)重要組成部分:
??*?事件(定時(shí)器/DOM事件/Ajax)管理模塊
??*?回調(diào)隊(duì)列
4.?模型的運(yùn)轉(zhuǎn)流程
??*?執(zhí)行初始化代碼,?將事件回調(diào)函數(shù)交給對(duì)應(yīng)模塊管理
??*?當(dāng)事件發(fā)生時(shí),?管理模塊會(huì)將回調(diào)函數(shù)及其數(shù)據(jù)添加到回調(diào)列隊(duì)中
??*?只有當(dāng)初始化代碼執(zhí)行完后(可能要一定時(shí)間),?才會(huì)遍歷讀取回調(diào)隊(duì)列中的回調(diào)函數(shù)執(zhí)行