1 回答

TA貢獻1853條經驗 獲得超9個贊
并發(fā)是 Go 的主要優(yōu)勢之一。這并不意味著 Go 運行時可以神奇地解決所有問題和案例,并使您的所有代碼閃電般快速。你可以用任何語言編寫糟糕的代碼。但是并發(fā)是內置在語言中的。它為您提供了幾種語言工具,意味著輕松編寫高效的并發(fā)代碼,例如 goroutines、channels、select
statement、同步原語。
goroutine 是一個輕量級線程。它比真正的 OS 線程成本低很多,并且多個 goroutine 可以多路復用到單個 OS 線程上。規(guī)范將它們定義為“同一地址空間內的獨立并發(fā)控制線程”。
Go 運行時能夠毫無問題地處理數(shù)千甚至數(shù)十萬個 goroutine。例如,標準庫中的HTTP 服務器通過為每個請求啟動一個新的 goroutine 來處理所有傳入請求。然而,對于典型的請求負載(基準源),它每秒能夠處理數(shù)萬個請求。
所以總而言之,不要寫“壞代碼”。goroutine 調度程序不是(完全)搶占式的,因此請確保您的 goroutines 不會進行會阻止調度程序運行其他 goroutines 的無意義計算。通常,系統(tǒng)調用、IO 操作符和阻塞操作(例如從通道發(fā)送/接收)是很好的屈服點。即使您不知道,許多代碼也會在后臺執(zhí)行這些操作,因此大多數(shù)代碼不會引起問題。如果您的某個 goroutine 必須進行大量計算,您可以隨時調用runtime.Gosched()
以讓處理器,允許其他 goroutine 運行。
- 1 回答
- 0 關注
- 150 瀏覽
添加回答
舉報