我有 n ~=1000 個作業在外部服務器上運行,每個作業都與我的程序中的一個 go-routine 相關聯。我在不同的時間開始工作,它們大致按照開始的順序完成,但這并不能保證。我從每個 go-routine 輪詢其相應的服務器作業:完成了嗎?我的出站請求是有速率限制的,所以我需要巧妙地進行輪詢。我想優先考慮由更早開始工作的 go-routines 進行輪詢。我現在這樣做的方式是,我有一個代表我的速率限制的通道,所有 go-routine 都等待從這個通道獲取一個值,輪詢他們的服務器,然后放回一個值。但是,不能保證這些 go-routines 甚至會隨機讀?。▋炏燃夗樞蛞俚枚啵?,因為在同一通道上讀取多個 go-routines 的行為是未定義的。有人可以指導我如何思考這個問題嗎?它不必是特定的,但我不確定我會在 Go 中使用哪些原語和數據結構來按優先級順序從通道讀取,同時考慮到速率限制。這似乎很困難,因為各個 goroutine 不知道整個程序的狀態——它們的哪些同事例程最先啟動,等等。他們應該只知道是否應該在任何給定時間輪詢他們的服務器。謝謝你。
Go:并發和優先級排序
慕的地6264312
2021-10-11 10:47:11
