溫馨提示×

溫馨提示×

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

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

Go語言runtime包怎么使用

發(fā)布時間:2023-05-05 14:16:28 來源:億速云 閱讀:92 作者:iii 欄目:開發(fā)技術(shù)

這篇“Go語言runtime包怎么使用”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Go語言runtime包怎么使用”文章吧。

Runtime包

GOMAXPROCS()

用來設(shè)置可以并行計算的CPU核數(shù)最大值,并返回之前的值

Gosched()

用于讓出CPU時間片,讓出當(dāng)前goroutine的執(zhí)行權(quán)限,調(diào)度器安排其他等待的任務(wù)運行,并在下次某個時候從該位置恢復(fù)執(zhí)行

Goexit()

用于立即中止當(dāng)前goroutine的運行(中止所在協(xié)程),而并不影響其他goroutine。注意!Goexit()在中止當(dāng)前協(xié)程前,還是會運行當(dāng)前goroutine還沒有執(zhí)行的defer語句,切記,不允許在主函數(shù)調(diào)用Goexit(),會導(dǎo)致panic異常

runtime調(diào)度器是非常有用的東西,關(guān)于runtime包幾個方法

  • Gosched:讓當(dāng)前線程讓出cpu以讓其他線程運行,它不會掛起當(dāng)前線程,因此當(dāng)前線程未來會繼續(xù)執(zhí)行

  • NumCPU:返回當(dāng)前系統(tǒng)的CPU核數(shù)量

  • GOMAXPROCS:設(shè)置最大的可同時使用的CPU核數(shù)

  • Goexit:退出當(dāng)前goroutine(但是defer語句會照常執(zhí)行)

  • NumGoroutine:返回真該執(zhí)行和排隊的任務(wù)總數(shù)

  • GOOS:目標(biāo)操作系統(tǒng)

  • GOROOT:返回本機的GO路徑

舉個栗子

// 定義兩個函數(shù),Test01和Test02
// Test02在Test01運行結(jié)束之后運行
// 并且Test02在i = 3的時候結(jié)束運行
//Test01
func Test01(wg *sync.WaitGroup) {
	defer func() {
		fmt.Println("Test01結(jié)束!")
		wg.Done()
	}()
	fmt.Println("協(xié)程01循環(huán)輸出:")
	for i := 0; i < 5; i++ {
		fmt.Println("協(xié)程01 -", i)
	}
}
// Test02
func Test02(wg *sync.WaitGroup) {
	defer func() {
		fmt.Println("Test02結(jié)束!")
		wg.Done()
	}()
    // 等待Test01運行結(jié)束
	runtime.Gosched()
	fmt.Println("協(xié)程02循環(huán)輸出:")
	for i := 0; i < 5; i++ {
		if i == 3 {
			fmt.Println("i = 3 退出!")
            // 當(dāng)i = 3時執(zhí)行defer里的語句然后退出
			runtime.Goexit()
		}
		fmt.Println("協(xié)程02 -", i)
	}
}
// main函數(shù)調(diào)用
func main() {
	var wg sync.WaitGroup
	wg.Add(2)
	go Test01(&wg)
	go Test02(&wg)
	wg.Wait()
	fmt.Println("This is main function!")
}
/*輸出:
協(xié)程01循環(huán)輸出:
協(xié)程01 - 0
協(xié)程01 - 1
協(xié)程01 - 2
協(xié)程01 - 3
協(xié)程01 - 4
Test01結(jié)束!
協(xié)程02循環(huán)輸出:
協(xié)程02 - 0
協(xié)程02 - 1
協(xié)程02 - 2
i = 3 退出!
Test02結(jié)束!
This is main function!
*/

以上就是關(guān)于“Go語言runtime包怎么使用”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI