這篇“Go語言runtime包怎么使用”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Go語言runtime包怎么使用”文章吧。
用來設置可以并行計算的CPU核數最大值,并返回之前的值
用于讓出CPU時間片,讓出當前goroutine的執行權限,調度器安排其他等待的任務運行,并在下次某個時候從該位置恢復執行
用于立即中止當前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包怎么使用”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。