<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                > # GMP 模型 - G是goroutine,P是處理器,M是線程 : 處理器負責調度goroutine到線程上,維護了一個本地隊列,存儲了所有需要它來調度的G - 創建G, 加入P的本地隊列,如果本地隊列滿了就加入全局G隊列 - P從本地隊列里取出G, 如果沒有, 從全局隊列里獲取, 如果也沒有從其它P里竊取一半G - 調度G執行,一個G最多占用P10ms, 調用阻塞時M會釋放P,P綁定空閑的M繼續執行 - G 執行完后如果不需要繼續執行則銷毀, 需要繼續執行的放回P的本地隊列中, 如果沒有綁定的P, 就放到全局隊列中。 - (M是線程, 默認初始化10000個,P是處理器, 默認與邏輯CPU數量相等) - (M阻塞時釋放P, G阻塞時M未阻塞,放回隊列) --- - 協程:協程是輕量級的,上下文切換快, 由用戶控制。go里面是GMP模型。G是goroutine。M是線程, 默認初始化10000個,所有的G都要放在M上才能運行。P是處理器, 默認與邏輯CPU數量相等,負責調度G到M上,維護了一個本地隊列,存儲了所有需要它來調度的G。 - 創建G, 加入P的本地隊列,如果本地隊列滿了就加入全局G隊列。 - P從本地隊列里取出G, 如果沒有, 從全局隊列里獲取, 如果也沒有從其它P里竊取一半G - 調度G執行,一個G最多占用P10ms, 調用阻塞時M會釋放P,P綁定空閑的M繼續執行 - G 執行完后如果不需要繼續執行則銷毀, 需要繼續執行的放回P的本地隊列中, 如果沒有綁定的P, 就放到全局隊列中。 - (M阻塞時釋放P, G阻塞時M未阻塞,放回隊列) ### GPM模型的工作原理 GPM模型的調度機制是基于協作式調度和搶占式調度的混合模式,主要工作原理如下: 1. **協作式調度**: * 每個協程在執行一段時間后,會主動讓出CPU,進入調度點。調度器會選擇下一個準備好的協程來執行。 * 常見的調度點包括函數調用、通道操作、以及阻塞操作(如等待I/O)。 2. **搶占式調度**: * 為了防止某些協程占用CPU時間過長,導致其它協程無法執行,Go運行時還引入了搶占式調度。 * 當一個協程運行時間過長時,調度器會強制中斷它的執行,并將其放回隊列,讓其他協程有機會執行。 3. **工作竊取**: * 為了均衡負載,每個處理器(P)都有一個本地隊列,用于存儲要執行的協程。 * 當一個處理器完成了它的所有任務,會嘗試從其他處理器的隊列中竊取任務,以保持系統的高效運行。 > 相關閱讀 - [go面試題整理](https://www.jianshu.com/p/93ef12be3ae4) - [go語言GMP(GPM)原理和調度](https://www.cnblogs.com/CJ-cooper/p/15270475.html)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看