首页 > 解决方案 > 如何定义通道缓冲区的最佳大小?

问题描述

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

诸如“最佳实践”之类的东西</p>

标签: gochannelgoroutine

解决方案


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

至于在确定频道大小时要考虑什么,这可能是一个不同的问题。首先要考虑的是程序的正确性:意思是程序是否会按预期运行并且没有错误。正如评论中提到的,在绝大多数情况下,“正确”值是 0 或 1,分别在同步和非同步通信中。

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


推荐阅读