從我對Go調度程序的理解中,Go調度算法是partially preemptive:goroutine開關在goroutine調用函數或阻塞I/O時發生。通道是否爲goroutine調度發送搶佔點?
發送消息到通道時是否發生goroutine切換?
// goroutine A
ch <- message
// some additional code without function calls
// goroutine B
message := <- ch
在上面的代碼中,我想在一個ch <- message
後的代碼,以在切換到B之前被執行,這是保證?或者B在ch
發送消息後立即進行排定?
依賴於運行時的實現細節充滿危險。我會重新考慮你的代碼。 –
很多時候沒有運行時間預防。 Goroutines A和B可能運行在內核預先設置的不同操作系統線程中,或者完全運行在不同的CPU內核上。 – JimB