<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## 調度器的生命周期 ![](https://img.kancloud.cn/54/34/543438a79d1e7cbcd8847a1858d3e200_439x872.png) 特殊的 M0 和 G0 M0 M0 是啟動程序后的編號為 0 的主線程,這個 M 對應的實例會在全局變量 runtime.m0 中,不需要在 heap 上分配,M0 負責執行初始化操作和啟動第一個 G, 在之后 M0 就和其他的 M 一樣了。 G0 G0 是每次啟動一個 M 都會第一個創建的 gourtine,G0 僅用于負責調度的 G,G0 不指向任何可執行的函數,每個 M 都會有一個自己的 G0。在調度或系統調用時會使用 G0 的棧空間,全局變量的 G0 是 M0 的 G0。 我們來跟蹤一段代碼 ~~~ package main import "fmt" func main() { fmt.Println("Hello world") } ~~~ 接下來我們來針對上面的代碼對調度器里面的結構做一個分析。 也會經歷如上圖所示的過程: * 1.runtime 創建最初的線程 m0 和 goroutine g0,并把 2 者關聯。 * 2.調度器初始化:初始化 m0、棧、垃圾回收,以及創建和初始化由 GOMAXPROCS 個 P 構成的 P 列表。 * 3.示例代碼中的 main 函數是 main.main,runtime 中也有 1 個 main 函數 ——runtime.main,代碼經過編譯后,runtime.main 會調用 main.main,程序啟動時會為 runtime.main 創建 goroutine,稱它為 main goroutine 吧,然后把 main goroutine 加入到 P 的本地隊列。 * 4.啟動 m0,m0 已經綁定了 P,會從 P 的本地隊列獲取 G,獲取到 main goroutine。 * 5.G 擁有棧,M 根據 G 中的棧信息和調度信息設置運行環境 * 6.M 運行 G * 7.G 退出,再次回到 M 獲取可運行的 G,這樣重復下去,直到 main.main 退出,runtime.main 執行 Defer 和 Panic 處理,或調用 runtime.exit 退出程序。 調度器的生命周期幾乎占滿了一個 Go 程序的一生,runtime.main 的 goroutine 執行之前都是為調度器做準備工作,runtime.main 的 goroutine 運行,才是調度器的真正開始,直到 runtime.main 結束而結束
                  <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>

                              哎呀哎呀视频在线观看