溫馨提示×

溫馨提示×

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

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

Go語言runtime包怎么使用

發布時間:2023-05-05 14:16:28 來源:億速云 閱讀:113 作者:iii 欄目:開發技術

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

Runtime包

GOMAXPROCS()

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

Gosched()

用于讓出CPU時間片,讓出當前goroutine的執行權限,調度器安排其他等待的任務運行,并在下次某個時候從該位置恢復執行

Goexit()

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

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

  • Gosched:讓當前線程讓出cpu以讓其他線程運行,它不會掛起當前線程,因此當前線程未來會繼續執行

  • NumCPU:返回當前系統的CPU核數量

  • GOMAXPROCS:設置最大的可同時使用的CPU核數

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

  • NumGoroutine:返回真該執行和排隊的任務總數

  • GOOS:目標操作系統

  • GOROOT:返回本機的GO路徑

舉個栗子

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

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

向AI問一下細節

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

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女