假设我有一系列想要应用于某些数据的操作。实现这些操作的程序不一定是用同一种语言编写的,但它们都是通过从 STDIN 读取并写入 STDOUT 来工作的。
在unix环境中,可以将其设置为管道,例如:
cat data.txt | prog1.sh | prog2.pl | prog3.py | prog4 > out.txt
它将在数据流上同时执行4个操作。
在 Windows 中也会发生同样的情况吗?
我记得几年前在 Windows XP 上使用 cygwin 对此进行了测试,但我只看到任务管理器中运行着一个 prog。
cygwin、新的 xp 服务包或 Windows 7/8 是否发生了允许并发管道传输的变化?还是它一直有效,而我只是在测试中犯了一个愚蠢的错误?
我现在无法访问 Windows 计算机,否则我会自己测试一下。如果有人知道发生了什么事,我很感激任何帮助。
最佳答案
虽然 Cygwin 实现的类 Unix 层与 native POSIX 系统或 native Windows 编程(特别是在性能方面)相比有许多缺陷,但它实现的管道非常“真实”。管道中的程序将同时运行,并并行处理它们接收到的数据。
但是,与任何管道一样,整个操作的速度将由最慢组件的速度决定。因此,如果管道中的某个程序的效率明显低于其他程序,它将主导进程列表中的 CPU 使用率。
关于windows - 使用 cygwin 在 Windows 中实现并发流水线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17330006/