Go語(yǔ)言入門(mén)13之runtime包案例講解
Runtime包
GOMAXPROCS()
? 用來(lái)設(shè)置可以并行計(jì)算的CPU核數(shù)最大值,并返回之前的值,具體使用方法上一篇有些,這里不再贅述
Gosched()
? 用于讓出CPU時(shí)間片,讓出當(dāng)前goroutine的執(zhí)行權(quán)限,調(diào)度器安排其他等待的任務(wù)運(yùn)行,并在下次某個(gè)時(shí)候從該位置恢復(fù)執(zhí)行
Goexit()
? 用于立即中止當(dāng)前goroutine的運(yùn)行(中止所在協(xié)程),而并不影響其他goroutine。?注意!Goexit()在中止當(dāng)前協(xié)程前,還是會(huì)運(yùn)行當(dāng)前goroutine還沒(méi)有執(zhí)行的defer語(yǔ)句,切記,不允許在主函數(shù)調(diào)用Goexit(),會(huì)導(dǎo)致panic異常
runtime調(diào)度器是非常有用的東西,關(guān)于runtime包幾個(gè)方法:
Gosched:讓當(dāng)前線程讓出cpu以讓其他線程運(yùn)行,它不會(huì)掛起當(dāng)前線程,因此當(dāng)前線程未來(lái)會(huì)繼續(xù)執(zhí)行
NumCPU:返回當(dāng)前系統(tǒng)的CPU核數(shù)量
GOMAXPROCS:設(shè)置最大的可同時(shí)使用的CPU核數(shù)
Goexit:退出當(dāng)前goroutine(但是defer語(yǔ)句會(huì)照常執(zhí)行)
NumGoroutine:返回真該執(zhí)行和排隊(duì)的任務(wù)總數(shù)
GOOS:目標(biāo)操作系統(tǒng)
- GOROOT:返回本機(jī)的GO路徑
舉個(gè)栗子
// 定義兩個(gè)函數(shù),Test01和Test02
// Test02在Test01運(yùn)行結(jié)束之后運(yùn)行
// 并且Test02在i = 3的時(shí)候結(jié)束運(yùn)行
//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運(yùn)行結(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時(shí)執(zhí)行defer里的語(yǔ)句然后退出
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語(yǔ)言入門(mén)13(runtime包)的文章就介紹到這了,更多相關(guān)Go runtime包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
IdeaGo啟動(dòng)報(bào)錯(cuò)Failed to create JVM的問(wèn)題解析
這篇文章主要介紹了IdeaGo啟動(dòng)報(bào)錯(cuò)Failed to create JVM的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
詳解Go語(yǔ)言微服務(wù)開(kāi)發(fā)框架之Go chassis
分布式系統(tǒng)中每個(gè)進(jìn)程的動(dòng)態(tài)配置管理及運(yùn)行時(shí)熱加載就成為了一個(gè)亟待解決的問(wèn)題。go chassis汲取了netflix的archaius框架經(jīng)驗(yàn),并做出來(lái)自己的創(chuàng)新特性。2021-05-05
Go語(yǔ)言使用kafka-go實(shí)現(xiàn)Kafka消費(fèi)消息
本篇文章主要介紹了使用kafka-go庫(kù)消費(fèi)Kafka消息,包含F(xiàn)etchMessage和ReadMessage的區(qū)別和適用場(chǎng)景,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的可以了解一下2024-12-12
使用Go語(yǔ)言構(gòu)建高效的二叉搜索樹(shù)聯(lián)系簿
樹(shù)是一種重要的數(shù)據(jù)結(jié)構(gòu),而二叉搜索樹(shù)(BST)則是樹(shù)的一種常見(jiàn)形式,在本文中,我們將學(xué)習(xí)如何構(gòu)建一個(gè)高效的二叉搜索樹(shù)聯(lián)系簿,感興趣的可以了解下2024-01-01
GoFrame框架gset交差并補(bǔ)集使用實(shí)例
這篇文章主要為大家介紹了GoFrame框架gset交差并補(bǔ)集使用實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
詳解golang channel有無(wú)緩沖區(qū)的區(qū)別
這篇文章主要給大家介紹了golang channel有無(wú)緩沖區(qū)的區(qū)別,無(wú)緩沖是同步的,有緩沖是異步的,文中通過(guò)代碼示例給大家講解的非常詳細(xì),需要的朋友可以參考下2024-01-01
go語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的并發(fā)網(wǎng)頁(yè)爬蟲(chóng)示例
在這個(gè)章節(jié)中,我們將會(huì)結(jié)合之前的知識(shí)點(diǎn),實(shí)現(xiàn)一個(gè)簡(jiǎn)易的并發(fā)網(wǎng)頁(yè)爬蟲(chóng),我們的爬蟲(chóng)會(huì)先爬取一個(gè)起始頁(yè)面,提取出所有的鏈接,然后并發(fā)地爬取這些鏈接,有需要的朋友可以借鑒參考下,希望能夠有所幫助2023-08-08

