runtime 調(diào)度器是個(gè)非常有用的東西,關(guān)于 runtime 包幾個(gè)方法:
目前創(chuàng)新互聯(lián)建站已為近千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機(jī)、網(wǎng)站運(yùn)營(yíng)、企業(yè)網(wǎng)站設(shè)計(jì)、五龍口網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
NumCPU
package main import ( "fmt" "runtime" ) func main() { fmt.Println("cpus:", runtime.NumCPU()) fmt.Println("goroot:", runtime.GOROOT()) fmt.Println("archive:", runtime.GOOS) }
運(yùn)行結(jié)果:
GOMAXPROCS
Golang 默認(rèn)所有任務(wù)都運(yùn)行在一個(gè) cpu 核里,如果要在 goroutine 中使用多核,可以使用 runtime.GOMAXPROCS 函數(shù)修改,當(dāng)參數(shù)小于 1 時(shí)使用默認(rèn)值。
package main import ( "fmt" "runtime" ) func init() { runtime.GOMAXPROCS(1) } func main() { // 任務(wù)邏輯... }
Gosched
這個(gè)函數(shù)的作用是讓當(dāng)前 goroutine 讓出 CPU,當(dāng)一個(gè) goroutine 發(fā)生阻塞,Go 會(huì)自動(dòng)地把與該 goroutine 處于同一系統(tǒng)線程的其他 goroutine 轉(zhuǎn)移到另一個(gè)系統(tǒng)線程上去,以使這些 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() //切換任務(wù) } } <-exit }
結(jié)果:
使用多核測(cè)試:
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() //切換任務(wù) } } <-exit }
結(jié)果:
根據(jù)你機(jī)器來(lái)設(shè)定運(yùn)行時(shí)的核數(shù),但是運(yùn)行結(jié)果不一定與上面相同,或者在 main 函數(shù)的最后加上 select{} 讓程序阻塞,則結(jié)果如下:
多核比較適合那種 CPU 密集型程序,如果是 IO 密集型使用多核會(huì)增加 CPU 切換的成本。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。
本文名稱:Golang中runtime的使用詳解
當(dāng)前網(wǎng)址:http://muchs.cn/article36/ghihpg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)、小程序開(kāi)發(fā)、建站公司、做網(wǎng)站、品牌網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)