2022-11-25
執(zhí)行 定時(shí)器 線程 進(jìn)程 單線
一、什么是進(jìn)程?
程序的一次執(zhí)行,它占有一片獨(dú)有的內(nèi)存空間。可以通過任務(wù)管理器查看進(jìn)程。
二、什么是線程?
線程是進(jìn)程內(nèi)的一個(gè)獨(dú)立的執(zhí)行單元。是程序執(zhí)行的一個(gè)完整流程。是CPU最小的調(diào)度單元。
應(yīng)用程序必須運(yùn)行在某個(gè)進(jìn)程的某個(gè)線程上。 一個(gè)進(jìn)程中至少有一個(gè)運(yùn)行的線程:主線程,進(jìn)程啟動(dòng)后自動(dòng)創(chuàng)建。 一個(gè)進(jìn)程也可以運(yùn)行多個(gè)線程。我們會(huì)說程序是多線程運(yùn)行的。 一個(gè)進(jìn)程中的數(shù)據(jù)可以供其中的多個(gè)線程直接共享。 多個(gè)進(jìn)程間的數(shù)據(jù)是不能直接共享的。 線程池(Thread Pool):保存多個(gè)線程對象的容器,實(shí)現(xiàn)線程對象的反復(fù)利用。
單線程和多線程的區(qū)別: 多線程: 優(yōu)點(diǎn):有效的提高CPU的利用率。 缺點(diǎn): 創(chuàng)建多線程會(huì)增大開銷。 線程間的切換開銷。 死鎖與狀態(tài)同步的問題。 單線程: 優(yōu)點(diǎn):順序編程簡單易懂。 缺點(diǎn):效率低。
JS程序是單線程運(yùn)行的。但使用HTML5中的Web Workers可以多線程運(yùn)行。瀏覽器是多線程運(yùn)行的。瀏覽器有單進(jìn)程,也有多進(jìn)程的。
三、瀏覽器內(nèi)核模塊
支撐瀏覽器運(yùn)行最核心的程序。不同的瀏覽器內(nèi)核可能不一樣。內(nèi)核是由很多模塊組成的。
瀏覽器模塊構(gòu)成: 主線程:
JS引擎模塊:負(fù)責(zé)JS程序的編譯與運(yùn)行。
HTML, CSS文檔解析模塊:負(fù)責(zé)頁面文本的解析。
DOM/CSS模塊:負(fù)責(zé)dom/css在內(nèi)存中的相關(guān)處理。
布局和渲染模塊:負(fù)責(zé)頁面的布局和效果的繪制(內(nèi)存中的對象)。
分線程:
定時(shí)器模塊:負(fù)責(zé)定時(shí)器的管理。
事件響應(yīng)模塊:負(fù)責(zé)事件的管理。
網(wǎng)絡(luò)請求模塊:負(fù)責(zé)ajax請求。
四、定時(shí)器的理解
定時(shí)器真的是定時(shí)執(zhí)行的嗎?
定時(shí)器并不能保證真正的定時(shí)執(zhí)行。一般會(huì)延遲一點(diǎn),但是可以接受。也可能是延遲很長時(shí)間,不能接受。
原因是JS是單線程的。定時(shí)器的回調(diào)函數(shù)是在主線程執(zhí)行的。所以回調(diào)函數(shù)的開始執(zhí)行時(shí)間受主線程的影響。
定時(shí)器回調(diào)函數(shù)是在分線程執(zhí)行的嗎?
是在主線程執(zhí)行的,因?yàn)镴S是單線程的。
定時(shí)器是如何實(shí)現(xiàn)的?
事件循環(huán)模型
五、JavaScript 單線程的理解
代碼分類:
初始化代碼
回調(diào)代碼
JS引擎執(zhí)行代碼的基本流程: 先執(zhí)行初始化代碼,包含一些特別的代碼(設(shè)置定時(shí)器,綁定監(jiān)聽,發(fā)送ajax請求)。 后面某個(gè)時(shí)刻執(zhí)行回調(diào)代碼。
為什么JS要設(shè)計(jì)成單線程模式? 如果JS使用多線程,此時(shí)程序中有兩個(gè)線程P1和P2.P1負(fù)責(zé)修改字段,P2負(fù)責(zé)刪除字段。它們同時(shí)作用于字段P。假設(shè)剛開始是P1搶到了資源但是在修改操作執(zhí)行之前,P2搶到了資源,將P的內(nèi)容刪除了,此時(shí)P1的修改操作會(huì)失敗。而且多線程間的切換也會(huì)浪費(fèi)系統(tǒng)的資源。
開班時(shí)間:2021-04-12(深圳)
開班盛況開班時(shí)間:2021-05-17(北京)
開班盛況開班時(shí)間:2021-03-22(杭州)
開班盛況開班時(shí)間:2021-04-26(北京)
開班盛況開班時(shí)間:2021-05-10(北京)
開班盛況開班時(shí)間:2021-02-22(北京)
開班盛況開班時(shí)間:2021-07-12(北京)
預(yù)約報(bào)名開班時(shí)間:2020-09-21(上海)
開班盛況開班時(shí)間:2021-07-12(北京)
預(yù)約報(bào)名開班時(shí)間:2019-07-22(北京)
開班盛況Copyright 2011-2023 北京千鋒互聯(lián)科技有限公司 .All Right 京ICP備12003911號(hào)-5 京公網(wǎng)安備 11010802035720號(hào)