我有一个计算密集型进程 X,它使用跨多个 CPU 的线程并行化。每个线程产生流输出,并且每个流应该单独连接到它自己的第二个进程 Y 的实例(运行的进程 Y 与线程的数量一样多)。X 和 Y 分别写入和读取二进制格式,因此吞吐量相当不错。我想尽量减少任何 I/O 开销,并且正在寻找最好的方法来做到这一点。目前我的设置看起来像这样(图中只有两个线程,但通常我会有八个以上):
exec 4> >( programY > out.4 )
exec 5> >( programY > out.5 )
programX-that-writes-to-fd-4-and-5
exec 4>&-
exec 5>&-
一个问题是 bash 手册指出:“使用大于 9 的文件描述符的重定向应谨慎使用,因为它们可能与 shell 内部使用的文件描述符冲突。” 这并不完全清楚。另一个问题是我还没有找到建立终止的好方法:目前我使用“lsof -c programY”,但这感觉就像一个黑客。有没有更好或改进的解决方案?这里的“给定”是 X 是多线程和计算密集型的,Y 是单线程和计算密集型的,并且 X 的每个线程都必须连接到 Y 的一个实例。