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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] # Gosched runtime.Gosched()讓出cpu的時間片,讓出當前協程的執行權限,調度器安排其他等待的任務運行,并在下次某個時間從該位置恢復執行 和協程 yield 作用類似 ~~~ func main() { go func() { for i := 0; i < 5; i++ { //不一定打印5次 fmt.Println("go") } }() //別忘記() for i := 0; i < 2; i++ { //讓出我的時間片 runtime.Gosched() fmt.Println("hello") } } ~~~ # Goexit 調用runtime.Goexit()將立即終止當前協程運行,調度器確保所有已注冊defer延遲調用執行 有時候我們會遇到這個問題 **調度器確保所有已注冊defer延遲調用被執行,要在Goexit之前注冊** ~~~ func test() { defer fmt.Println("test-------") return //終止使用此函數 fmt.Println("1111111111") } func main() { go func() { fmt.Println("aaaa") //調用了別的函數 test() //沒打印 fmt.Println("bbb") }() //別忘記() for { } } ~~~ 輸出 ~~~ aaaa test------- bbb ~~~ ~~~ func test() { defer fmt.Println("test-------") //終止這個協程 runtime.Goexit() //return fmt.Println("1111111111") } func main() { go func() { fmt.Println("aaaa") //調用了別的函數 test() //沒打印 fmt.Println("bbb") }() //別忘記() for { } } ~~~ 輸出 ~~~ aaaa test------- ~~~ # GOMAXPROCS 調用runtime.GOMAXPROCS()用來設置可以并行計算的cpu核數的最大值,并返回之前的值 ~~~ func main() { //指定核數 n := runtime.GOMAXPROCS(2) fmt.Println(n) } ~~~ # 多任務資源競爭 ~~~ //定義一個打印機 //打印機屬于公共資源 func Printer(str string) { for _, data := range str{ fmt.Printf("%c", data) time.Sleep(time.Second) } fmt.Printf("\n") } func Person1() { Printer("hello") } func Person2() { Printer("world") } func main() { //新建2個協程,代表2個人,2個人同時使用打印機 go Person1() go Person2() //特意不讓主協程結束,死循環 for { } } ~~~ 打印會亂掉 我們如何讓他同步呢 # 其他的小功能 返回go的根目錄,存在GOROOT環境變量返回該環境變量,不存在返回go的根目錄 ~~~ func GOROOT() string ~~~ 版本 ~~~ func Version() string ~~~ cpu個數 ~~~ func NumCPU() int ~~~ GC ~~~ func GC() ~~~ # 查看時間 ~~~ go build main.go time -p ./main ~~~ 輸出結果: ~~~ 0 9223372030412324865 1 9223372030412324865 real 1.92 // 程序開始到結束時間差 ( CPU 時間) user 3.80 // 用戶態所使用 CPU 時間片 (多核累加) sys 0.01 // 內核態所使用 CPU 時間片 ~~~ 命令行輸入: ~~~ GOMAXPROCS=8 time -p ./main ~~~ 輸出結果: ~~~ 1 9223372030412324865 0 9223372030412324865 real 1.89 user 3.76 // 雖然總時間差不多,但由 2 個核并行,real 時間自然少了許多。 sys 0.00 ~~~
                  <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>

                              哎呀哎呀视频在线观看