如何计算适当的通道容量



我正在寻找解决方案,因为sth通道已满。我很难计算信道容量的适当容量。

本文件有以下说明。

为了计算适当的容量,只需考虑以下参数:
・每单位时间(假设为1分钟(由源放入通道的事件数量
・接收器每单位时间从通道中获取的事件数
・对每单位时间内无法处理的事件数量的估计,因此将重新注入通道(见下一节(。

如何检查这些参数的值?

如何检查这些参数的值?

您不能只是检查这些参数。它们取决于您的应用程序。

他们说的是,你应该有一个足够大的尺寸,这样发电机就不会卡住。这在您的应用程序中可能不可能。

假设生成器每秒接收一个事件,接收器需要2秒钟才能管理该事件。现在假设您有3个接收器。在1秒内,每个接收器可以处理0.5个事件。你有3个接收器,所以你的接收器加在一起能够处理0.5×3=1.5个事件,这比你作为输入得到的要多。你的容量可以是1或2,使用2将大大增加你不被阻挡的机会。

让我们回顾另一个例子:

  • 您的生成器希望每秒推送1000个事件
  • 您的接收器处理一个事件需要3秒钟
  • 您需要1000 x 3=3000个接收器(3000个并行全速运行的goroutine…(

在本例中,接收器的总数太大,以至于您必须分解代码才能在多台计算机上工作,或者优化接收器代码,以便它能够在合理的时间内处理数据。假设你有50个处理器,你的接收器每秒将获得1000个事件,所有50个都可以全速运行,你需要一个接收器来完成它的工作:

50/1000=0.05秒

现在让我们假设在大多数情况下,你的goroutine需要0.02,但偶尔会需要1秒。这意味着你的狂欢可能会落后一点。在这种情况下,你的容量(这样发电机就不会堵塞(应该略高于1000。同样,这将取决于有多少例程被减慢,等等。在最后一个例子中,一次运行是0.02秒,所以处理1000个事件通常需要0.02秒。如果你能在1秒内发送这1000个事件,你甚至可能不需要50个goroutines,而且容量可能会更小。另一方面,如果你有大的突发,你可能会在一个中发送很多(比如500(个事件,那么更多的goroutines和更大的容量对于不被阻止是很重要的。

最新更新