我有 n ~=1000 個(gè)作業(yè)在外部服務(wù)器上運(yùn)行,每個(gè)作業(yè)都與我的程序中的一個(gè) go-routine 相關(guān)聯(lián)。我在不同的時(shí)間開始工作,它們大致按照開始的順序完成,但這并不能保證。我從每個(gè) go-routine 輪詢其相應(yīng)的服務(wù)器作業(yè):完成了嗎?我的出站請(qǐng)求是有速率限制的,所以我需要巧妙地進(jìn)行輪詢。我想優(yōu)先考慮由更早開始工作的 go-routines 進(jìn)行輪詢。我現(xiàn)在這樣做的方式是,我有一個(gè)代表我的速率限制的通道,所有 go-routine 都等待從這個(gè)通道獲取一個(gè)值,輪詢他們的服務(wù)器,然后放回一個(gè)值。但是,不能保證這些 go-routines 甚至?xí)S機(jī)讀?。▋?yōu)先級(jí)順序要少得多),因?yàn)樵谕煌ǖ郎献x取多個(gè) go-routines 的行為是未定義的。有人可以指導(dǎo)我如何思考這個(gè)問題嗎?它不必是特定的,但我不確定我會(huì)在 Go 中使用哪些原語(yǔ)和數(shù)據(jù)結(jié)構(gòu)來(lái)按優(yōu)先級(jí)順序從通道讀取,同時(shí)考慮到速率限制。這似乎很困難,因?yàn)楦鱾€(gè) goroutine 不知道整個(gè)程序的狀態(tài)——它們的哪些同事例程最先啟動(dòng),等等。他們應(yīng)該只知道是否應(yīng)該在任何給定時(shí)間輪詢他們的服務(wù)器。謝謝你。
Go:并發(fā)和優(yōu)先級(jí)排序
慕的地6264312
2021-10-11 10:47:11