真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Go語(yǔ)言怎么實(shí)現(xiàn)stoptheworld

本篇內(nèi)容主要講解“Go語(yǔ)言怎么實(shí)現(xiàn)stop the world”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Go語(yǔ)言怎么實(shí)現(xiàn)stop the world”吧!

創(chuàng)新互聯(lián)建站自2013年起,先為江川等服務(wù)建站,江川等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢(xún)服務(wù)。為江川企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。

停止世界(Stop the world)

停止程序意味著停止所有正在運(yùn)行的 goroutine。下面是一個(gè)執(zhí)行 STW 的簡(jiǎn)單程序:

func main() {    runtime.GC() }

運(yùn)行垃圾回收器,將觸發(fā) STW 兩個(gè)階段。

有關(guān)垃圾回收器周期的更多信息,建議閱讀我的另外一篇文章 “Go:垃圾收集器如何標(biāo)記內(nèi)存? ① ”

第一步:搶占所有正在運(yùn)行的 goroutine:

Go語(yǔ)言怎么實(shí)現(xiàn)stop the world

goroutine 搶占

一旦 goroutine 被搶占,它們將在安全點(diǎn)停止。同時(shí),P 處理器將(正在運(yùn)行的代碼或在空閑列表)被標(biāo)記為已停止,以不運(yùn)行任何代碼:

Go語(yǔ)言怎么實(shí)現(xiàn)stop the world

P 標(biāo)記為已停止

然后,Go 調(diào)度程序?qū)⑦\(yùn)行,將每個(gè) M 與其 P 各自分離,并將其放入空閑列表中:

Go語(yǔ)言怎么實(shí)現(xiàn)stop the world

M 已移至閑置清單

關(guān)于在每個(gè)上運(yùn)行的 goroutine M,它們將在全局隊(duì)列中等待:

Go語(yǔ)言怎么實(shí)現(xiàn)stop the world

Goroutine 在全局隊(duì)列中等待

然后,一旦世界停止了,只有唯一活動(dòng)的 goroutine 才能安全地運(yùn)行,并在工作完成后啟動(dòng)整個(gè)世界。下面跟蹤圖將有助于理解此階段發(fā)生在何時(shí):

Go語(yǔ)言怎么實(shí)現(xiàn)stop the world

跟蹤 “ STW”階段

系統(tǒng)調(diào)用

“STW”階段也可能會(huì)影響系統(tǒng)調(diào)用,因?yàn)樗鼈兛赡軙?huì)在 STW 時(shí)返回。讓我們以一個(gè)密集執(zhí)行系統(tǒng)調(diào)用的例子,并查看其如何處理:

func main() {    var wg sync.WaitGroup    wg.Add(10)    for i := 0; i < 10; i++ {       go func() {          http.Get(`https://httpstat.us/200`)          wg.Done()       }()    }    wg.Wait() }

這是跟蹤:

Go語(yǔ)言怎么實(shí)現(xiàn)stop the world

STW 階段,系統(tǒng)調(diào)用正在結(jié)束。但是,由于沒(méi)有可用 P(如上一節(jié)所述,它們都被標(biāo)記為已停止),goroutine  將被放入全局隊(duì)列,并在世界恢復(fù)時(shí)稍后運(yùn)行。

延遲時(shí)間

“STW” 第三步涉及將所有 M 與其 P 分離。但是,Go 將等待它們自行停止:在調(diào)度程序運(yùn)行時(shí),在 syscall 調(diào)用中等。等待 goroutine  被搶占應(yīng)該很快,但是在某些情況下,可能會(huì)導(dǎo)致某些延遲。讓我們以一個(gè)極端的情況為例:

func main() {    var t int    for i := 0;i < 20 ;i++  {       go func() {          for i := 0;i < 1000000000 ;i++ {             t++          }       }()    }     runtime.GC() }

在這里,“ Stop the World”階段需要 2.6 秒:

Go語(yǔ)言怎么實(shí)現(xiàn)stop the world

到此,相信大家對(duì)“Go語(yǔ)言怎么實(shí)現(xiàn)stop the world”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!


網(wǎng)站題目:Go語(yǔ)言怎么實(shí)現(xiàn)stoptheworld
本文網(wǎng)址:http://weahome.cn/article/jscicg.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部