亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Golang中runtime的使用詳解

發布時間:2020-09-03 23:34:17 來源:腳本之家 閱讀:516 作者:田飛雨 欄目:編程語言

runtime 調度器是個非常有用的東西,關于 runtime 包幾個方法:

  • Gosched:讓當前線程讓出 cpu 以讓其它線程運行,它不會掛起當前線程,因此當前線程未來會繼續執行
  • NumCPU:返回當前系統的 CPU 核數量
  • GOMAXPROCS:設置最大的可同時使用的 CPU 核數
  • Goexit:退出當前 goroutine(但是defer語句會照常執行)
  • NumGoroutine:返回正在執行和排隊的任務總數
  • GOOS:目標操作系統

NumCPU

package main

import (
  "fmt"
  "runtime"
)

func main() {
  fmt.Println("cpus:", runtime.NumCPU())
  fmt.Println("goroot:", runtime.GOROOT())
  fmt.Println("archive:", runtime.GOOS)
}

運行結果:

Golang中runtime的使用詳解

GOMAXPROCS

Golang 默認所有任務都運行在一個 cpu 核里,如果要在 goroutine 中使用多核,可以使用 runtime.GOMAXPROCS 函數修改,當參數小于 1 時使用默認值。

package main

import (
  "fmt"
  "runtime"
)

func init() {
  runtime.GOMAXPROCS(1)
}

func main() {
  // 任務邏輯...

}

Gosched

這個函數的作用是讓當前 goroutine 讓出 CPU,當一個 goroutine 發生阻塞,Go 會自動地把與該 goroutine 處于同一系統線程的其他 goroutine 轉移到另一個系統線程上去,以使這些 goroutine 不阻塞

package main

import (
  "fmt"
  "runtime"
)

func init() {
  runtime.GOMAXPROCS(1) //使用單核
}

func main() {
  exit := make(chan int)
  go func() {
    defer close(exit)
    go func() {
      fmt.Println("b")
    }()
  }()

  for i := 0; i < 4; i++ {
    fmt.Println("a:", i)

    if i == 1 {
      runtime.Gosched() //切換任務
    }
  }
  <-exit

}

結果:

Golang中runtime的使用詳解

使用多核測試:

package main

import (
  "fmt"
  "runtime"
)

func init() {
  runtime.GOMAXPROCS(4) //使用多核
}

func main() {
  exit := make(chan int)
  go func() {
    defer close(exit)
    go func() {
      fmt.Println("b")
    }()
  }()

  for i := 0; i < 4; i++ {
    fmt.Println("a:", i)

    if i == 1 {
      runtime.Gosched() //切換任務
    }
  }
  <-exit

}

結果:

Golang中runtime的使用詳解

根據你機器來設定運行時的核數,但是運行結果不一定與上面相同,或者在 main 函數的最后加上 select{} 讓程序阻塞,則結果如下:

Golang中runtime的使用詳解

多核比較適合那種 CPU 密集型程序,如果是 IO 密集型使用多核會增加 CPU 切換的成本。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

手游| 富裕县| 黄骅市| 武安市| 乌苏市| 炉霍县| 伊宁县| 夏邑县| 奇台县| 福建省| 同心县| 和顺县| 资源县| 洛川县| 成安县| 左云县| 松江区| 安福县| 庆安县| 无锡市| 大兴区| 祁连县| 福海县| 施甸县| 会同县| 林口县| 应用必备| 曲麻莱县| 仁化县| 霍林郭勒市| 高平市| 东港市| 临高县| 千阳县| 南京市| 九寨沟县| 南陵县| 金昌市| 长宁县| 梅河口市| 舞钢市|