<span id="35v3v"><th id="35v3v"></th></span>
<address id="35v3v"></address>

    <address id="35v3v"></address>
      <address id="35v3v"><listing id="35v3v"><meter id="35v3v"></meter></listing></address>
        <listing id="35v3v"><listing id="35v3v"></listing></listing>

        <listing id="35v3v"><listing id="35v3v"><menuitem id="35v3v"></menuitem></listing></listing>

        <noframes id="35v3v"><noframes id="35v3v">
        當前位置: 首頁 / 技術分享 / 正文
        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號

        黑人100部Av解禁片
        <span id="35v3v"><th id="35v3v"></th></span>
        <address id="35v3v"></address>

          <address id="35v3v"></address>
            <address id="35v3v"><listing id="35v3v"><meter id="35v3v"></meter></listing></address>
              <listing id="35v3v"><listing id="35v3v"></listing></listing>

              <listing id="35v3v"><listing id="35v3v"><menuitem id="35v3v"></menuitem></listing></listing>

              <noframes id="35v3v"><noframes id="35v3v">