我有以下情况:我在频道上收到一条消息,告诉我上传文件。上传是由阻塞功能完成的uploadToServer。该zipGen频道每秒可能会收到几条消息,我想同时上传最多 5 个文件(不会更多,但可能更少 - 取决于zipGen超出此问题范围的第三个工作人员发送的消息数量)。
该listenToZips函数在 go 例程中运行(go listenToZips()在文件的init函数上):
func listenToZips() {
for {
select {
case zip := <-zipGen:
uploadToServer(zip) // this is blocking
}
}
}
如果我启动go uploadToServer(zip)而不是仅仅启动uploadToServer(zip)- 我会得到太多并发(例如,我的程序将尝试同时上传 10 个文件,但我最多需要 5 个)。
另一方面,没有go uploadToServer(zip)(uploadToServer(zip)就像在上面的函数中一样使用),我一次只上传一个文件(因为它uploadToServer(zip)被阻塞了)。
我怎样才能达到这种控制水平,让我最多同时上传 5 个文件?
翻过高山走不出你
相关分类