什么时候将异步螺纹尺寸从零增加?

Jr0*_*Jr0 15 erlang

我一直在阅读文档,试图了解何时通过+ AN开关增加异步线程池大小是有意义的.

我完全准备好进行基准测试,但我想知道是否有一个经验法则,当一个人应该怀疑将池大小从0增加到N(或N到N + M)会有所帮助.

谢谢

rvi*_*ing 24

BEAM在称为调度程序的特殊线程中运行Erlang代码.默认情况下,它将为处理器中的每个核心启动调度程序.这可以控制和启动时间,例如,如果您不想在所有核心上运行Erlang,而是为其他内容"保留"一些.通常,当您执行文件I/O操作时,它会在调度程序中运行,并且由于文件I/O操作相对较慢,它们将在运行时阻止该调度程序.哪个会影响实时属性.通常你没有那么多的文件I/O,所以这不是一个问题.

异步线程池都被用于I/O操作OS线程.通常,池是空的,但如果您+A在启动时使用,则BEAM将为此池创建额外的线程.这些线程将仅用于文件I/O操作,这意味着调度程序线程将不再阻止等待文件I/O并且实时属性得到改进.当然,这是因为OS线程不是免费的.线程不混合,因此调度程序线程只是调度程序线程,而异步线程只是异步线程.

如果您正在为端口编写链接驱动程序,则这些驱动程序也可以使用异步线程池.但你必须自己检测它们何时开始.

您需要多少是非常适合您的应用程序.默认情况下,没有启动.就像@demeshchuk一样,我也听说过Riak喜欢拥有一个大的异步线程池,因为他们打开了很多文件.我唯一的建议是尝试并衡量.与所有优化一样?