go語言runtime.Gosched

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

func say(s string) {

for i := 0; i < 2; i++ {

runtime.Gosched()

fmt.Println(s)

}

}


func main() {

go say("world")

say("hello")

}

輸出:

hello

world

hello

1、先輸出了hello,後輸出了world

2、hello輸出了2個,world輸出了1個(因為第2個hello輸出完,主線程就退出了,第2個world沒機會了)

如果把代碼中的runtime.Gosched()注釋掉,執行結果為:

hello

hello

因為say("hello")這句佔用了時間,等它執行完,線程也結束了,say("world")就沒有機會了。

從這裡也可以看出,goroutine並不是真正的“並行”,goroutine都在一個線程裡,它們之間通過不停的讓出時間片輪流程執行,達到類似啟動並執行效果。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.