Runtime包 GOMAXPROCS() 用來設置可以並行計算的CPU核數最大值,並返回之前的值,具體使用方法上一篇有些,這裡不再贅述 Gosched() 用於讓出CPU時間片,讓出當前goroutine的執行許可權,調度器安排其他等待的任務運行,併在下次某個時候從該位置恢復執行 Goexi ...
Runtime包
GOMAXPROCS()
用來設置可以並行計算的CPU核數最大值,並返回之前的值,具體使用方法上一篇有些,這裡不再贅述
Gosched()
用於讓出CPU時間片,讓出當前goroutine的執行許可權,調度器安排其他等待的任務運行,併在下次某個時候從該位置恢復執行
Goexit()
用於立即中止當前goroutine的運行(中止所在協程),而並不影響其他goroutine。⭐註意!Goexit()在中止當前協程前,還是會運行當前goroutine還沒有執行的defer語句,切記,不允許在主函數調用Goexit(),會導致panic異常
舉個慄子
// 定義兩個函數,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!
*/