2 回答

TA貢獻1803條經(jīng)驗 獲得超6個贊
Goroutines 不是線程,它們是(來自規(guī)范):
...在同一地址空間內(nèi)的獨立并發(fā)控制線程或goroutine。
Effective Go將它們定義為:
它們之所以被稱為goroutine,是因為現(xiàn)有的術語——線程、協(xié)程、進程等——傳達了不準確的內(nèi)涵。goroutine 有一個簡單的模型:它是一個與同一地址空間中的其他 goroutine 并發(fā)執(zhí)行的函數(shù)。它是輕量級的,成本比分配堆??臻g多一點。并且堆棧開始時很小,因此它們很便宜,并且可以通過根據(jù)需要分配(和釋放)堆存儲來增長。
Goroutines 沒有自己的線程。相反,多個 goroutines(可能)被復用到同一個 OS 線程上,所以如果一個 goroutines 應該阻塞(例如等待 I/O 或阻塞通道操作),其他 goroutines 繼續(xù)運行。
同時執(zhí)行 goroutine 的實際線程數(shù)可以通過該runtime.GOMAXPROCS()
函數(shù)設置。從runtime
包文檔中引用:
GOMAXPROCS 變量限制了可以同時執(zhí)行用戶級 Go 代碼的操作系統(tǒng)線程的數(shù)量。代表Go代碼在系統(tǒng)調(diào)用中可以阻塞的線程數(shù)沒有限制;這些不計入 GOMAXPROCS 限制。
請注意,在當前的實現(xiàn)中,默認情況下只有 1 個線程用于執(zhí)行 goroutine。
- 2 回答
- 0 關注
- 191 瀏覽
添加回答
舉報