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