如何定义通道缓冲区的最佳大小?

How to define the optimal size of the buffer for a channel?

我知道缓冲区的大小可以在应用程序性能中发挥重要作用,但是定义缓冲区大小的最佳方法是什么?尺码时我应该考虑什么?

类似“最佳实践”的东西

为了证明缓冲区大小实际上是影响性能的一个重要因素,您必须测量性能并尝试不同的大小进行比较。到那时,你已经有了找到一个好的值的方法(只需继续测试和比较)。

至于调整频道大小时应该考虑什么,那可能是另一个问题。首先要考虑的是程序的正确性:也就是说,程序是否会按预期运行并且没有错误。如评论中所述,在绝大多数情况下,在同步和非同步通信中,“正确”值分别为 0 或 1。

如果您的通道确实需要 大于 1 的缓冲区大小,那么您必须确定通道必须保持的值的上限或“最坏情况”数量一次以避免死锁。如果您不能确切地确定那个数字是多少,这是一个没有上限的好兆头。例如,如果您有一个发送消息的递归例程,则可能没有上限。如果是这种情况,您必须重新设计程序以动态存储值,例如切片。