中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

Go語言怎么實現(xiàn)stoptheworld

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

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

停止世界(Stop the world)

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

func main() {    runtime.GC() }

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

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

第一步:搶占所有正在運行的 goroutine:

Go語言怎么實現(xiàn)stop the world

goroutine 搶占

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

Go語言怎么實現(xiàn)stop the world

P 標記為已停止

然后,Go 調度程序將運行,將每個 M 與其 P 各自分離,并將其放入空閑列表中:

Go語言怎么實現(xiàn)stop the world

M 已移至閑置清單

關于在每個上運行的 goroutine M,它們將在全局隊列中等待:

Go語言怎么實現(xiàn)stop the world

Goroutine 在全局隊列中等待

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

Go語言怎么實現(xiàn)stop the world

跟蹤 “ STW”階段

系統(tǒng)調用

“STW”階段也可能會影響系統(tǒng)調用,因為它們可能會在 STW 時返回。讓我們以一個密集執(zhí)行系統(tǒng)調用的例子,并查看其如何處理:

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語言怎么實現(xiàn)stop the world

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

延遲時間

“STW” 第三步涉及將所有 M 與其 P 分離。但是,Go 將等待它們自行停止:在調度程序運行時,在 syscall 調用中等。等待 goroutine  被搶占應該很快,但是在某些情況下,可能會導致某些延遲。讓我們以一個極端的情況為例:

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語言怎么實現(xiàn)stop the world

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

本文題目:Go語言怎么實現(xiàn)stoptheworld
分享鏈接:http://www.rwnh.cn/article26/jscicg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設做網(wǎng)站、靜態(tài)網(wǎng)站、、品牌網(wǎng)站制作、網(wǎng)站設計公司

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設計
澄江县| 内丘县| 兴安盟| 白朗县| 忻州市| 班戈县| 丰宁| 太仆寺旗| 雅江县| 额敏县| 随州市| 衢州市| 涟源市| 阿尔山市| 如皋市| 阿拉善盟| 扎囊县| 都昌县| 泾源县| 信丰县| 玉屏| 九江县| 全椒县| 沛县| 色达县| 澄城县| 板桥市| 南木林县| 禹城市| 仁寿县| 南皮县| 棋牌| 安溪县| 社旗县| 社旗县| 贵港市| 拉萨市| 浪卡子县| 瓮安县| 石屏县| 凤翔县|