CRYSTAL_WORKERS默认为 4 对于 Crystal-lang 应用程序来说是否太低了?还有人基准更高吗?



我很高兴 Crystal-lang 现在有了多线程。有没有人为 Crystal-lang 做过一些多线程基准测试;如果是这样,您认为哪些CRYSTAL_WORKERS对您基准测试有益?(是的,我知道,每个基准都不同,所以里程可能会有所不同。

CRYSTAL_WORKERS 的默认值是 4,但至少在更高核心的系统上,它似乎应该更多。导致该4值的基准是否可能与当时使用的内核数量的副作用或其他因素有关?

  • https://crystal-lang.org/2019/09/06/parallelism-in-crystal.html

  • https://github.com/crystal-lang/crystal/commit/f106d93f9bc10a0176d2da6f07f477ad34a9cda4#diff-390767d4904eb70109bd332570d8cc4R216

我在 8 核(英特尔(和 16 核(AMD(CPU 上做了一些斐波那契比较,得到了一些大的波峰和谷模式(https://github.com/drhuffman12/bench_vs/blob/master/threads/README.md(。(对于简单的计算/转换,纤维/等的开销似乎不值得;但对于计算密集型代码,如Fibinacci calcs,具有更高CRYSTAL_WORKERS值和same_thread: false的纤维似乎可能会有所帮助。

这个问题没有答案。工作线程的数量在很大程度上取决于应用程序的类型以及运行时系统上资源的可用性/管理。

当然,当您的系统有超过 4 个内核时,您需要一个更大的数字才能使用更多的可用计算能力。但是,您不一定希望使所有内核饱和,具体取决于系统上正在运行的其他内核。特别是 IO 绑定的应用程序不一定会从拥有太多的工作线程中受益。因此,设置CRYSTAL_WORKERS=$(nprocs)可能不是一个好主意。

CRYSTAL_WORKERS=4只是一个默认值,因为需要一个默认值。这是一个非常常见的默认值,因为 a( 它应该提供对单线程执行的合理改进,以及 b( 现代 CPU 通常至少有 4 个内核。

每当将应用程序部署到运行时系统时,您都需要考虑此特定环境的适当工作线程编号,并相应地对其进行配置。使用不同的默认值没有任何帮助。

最新更新