我正在运行一些基准测试,其中有一个执行某些文件 IO 的程序。它创建一个新目录,向该目录写入和读取一些文件,然后将其删除。当我在多个核心上运行这个程序时,一次运行这个过程的更多实例,我得到了预期的结果(一些加速,当我接近机器的极限时,速度开始变平。从 1 个核心到 12 个核心使程序 8.5 x 更快)。
我有这个程序的第二个变体,它不使用文件 IO。相反,它打开管道并通过这些管道传递数据,将命令链接在一起。最多一次会打开3个管道。即使按顺序,这个程序自然也会快得多(大约 10 倍)。然而,当我开始添加更多核心时,它开始变得非常快;在三个核心上,它似乎完全变平,加速速度提高了 2 倍。从 3 核到 12 核也没有任何恶化。执行速度几乎保持不变。没有改善或退化。
有一些资源即将耗尽,我不明白。我猜测有一些我不知道的与 Unix 管道相关的上限。我试图在网上查找详细信息,但没有发现任何听起来可疑的内容。我一次最多通过管道发送 100 个字符。我一次可以打开的 Unix 管道数量有限制吗?我觉得很奇怪,我如何添加更多的工作人员来打开更多的管道,而性能既没有增加也没有减少。