當前位置: 首頁 / 技術分享 / 正文
JavaScript 線程與進程初探

2022-11-25

執行 定時器 線程 進程 單線

  一、什么是進程?

  程序的一次執行,它占有一片獨有的內存空間??梢酝ㄟ^任務管理器查看進程。

  二、什么是線程?

  線程是進程內的一個獨立的執行單元。是程序執行的一個完整流程。是CPU最小的調度單元。

  應用程序必須運行在某個進程的某個線程上。 一個進程中至少有一個運行的線程:主線程,進程啟動后自動創建。 一個進程也可以運行多個線程。我們會說程序是多線程運行的。 一個進程中的數據可以供其中的多個線程直接共享。 多個進程間的數據是不能直接共享的。 線程池(Thread Pool):保存多個線程對象的容器,實現線程對象的反復利用。

  單線程和多線程的區別: 多線程: 優點:有效的提高CPU的利用率。 缺點: 創建多線程會增大開銷。 線程間的切換開銷。 死鎖與狀態同步的問題。 單線程: 優點:順序編程簡單易懂。 缺點:效率低。

  JS程序是單線程運行的。但使用HTML5中的Web Workers可以多線程運行。瀏覽器是多線程運行的。瀏覽器有單進程,也有多進程的。

JavaScript 線程與進程初探

  三、瀏覽器內核模塊

  支撐瀏覽器運行最核心的程序。不同的瀏覽器內核可能不一樣。內核是由很多模塊組成的。

  瀏覽器模塊構成: 主線程:

  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的修改操作會失敗。而且多線程間的切換也會浪費系統的資源。

分享: 更多

上一篇:Promise、generato....sync類同步編程

下一篇:

好程序員公眾號

  • · 剖析行業發展趨勢
  • · 匯聚企業項目源碼

好程序員開班動態

More+
  • HTML5大前端 <高端班>

    開班時間:2021-04-12(深圳)

    開班盛況

    開班時間:2021-05-17(北京)

    開班盛況
  • 大數據+人工智能 <高端班>

    開班時間:2021-03-22(杭州)

    開班盛況

    開班時間:2021-04-26(北京)

    開班盛況
  • JavaEE分布式開發 <高端班>

    開班時間:2021-05-10(北京)

    開班盛況

    開班時間:2021-02-22(北京)

    開班盛況
  • Python人工智能+數據分析 <高端班>

    開班時間:2021-07-12(北京)

    預約報名

    開班時間:2020-09-21(上海)

    開班盛況
  • 云計算開發 <高端班>

    開班時間:2021-07-12(北京)

    預約報名

    開班時間:2019-07-22(北京)

    開班盛況
在線咨詢
試聽
入學教程
立即報名

Copyright 2011-2023 北京千鋒互聯科技有限公司 .All Right 京ICP備12003911號-5 京公網安備 11010802035720號

美女裸体黄网站18禁免费_美女裸体黄网站啪啪18禁_美女裸体黄污18禁网站免费下载