我正在编写一个golang程序,它必须使用并行运行的goroutine(使用GOMAXPROCS)一次执行多个下载请求。此外,还有一种状态保存,即下载哪些组件以及下载哪些组件。互斥解决方案是锁定此结构,跟踪哪些组件已成功下载。我已经读过,当试图保持状态时,互斥是最好的选择。
但是,我想知道什么是利用渠道的解决方案(通过所有权而不是提供独家访问状态)而不是互斥,或者互斥是最佳选择?
P.S。 到目前为止,我已经考虑过将全局结构保持在所有使用一个通道(读写通道)的go例程之间的状态。一个go例程尝试从通道中读取结构,然后在完成时将其写回。我发现的问题是,当最后一个运行的例程[假设所有其他已经完成并且停止运行]放弃它的位置通过写入通道的结构,由于没有接收器,它将导致死锁。此外,这仍然试图将频道用作互斥[试图提供独占访问]。