windows - 使用 cygwin 在 Windows 中实现并发流水线

标签 windows unix concurrency cygwin pipe

假设我有一系列想要应用于某些数据的操作。实现这些操作的程序不一定是用同一种语言编写的,但它们都是通过从 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/

相关文章:

java - 为什么PriorityBlockingQueue队列没有​​按照优先级对元素进行排序

c++ - 为什么条件变量需要锁(因此也需要互斥锁)

c++ - 给定线程 ID,如何确定它是否仍在 Windows 上运行

java - Apache Curator 双重锁定问题与多个服务

linux - 在多个 Git 存储库之间共享 .mailmap 或其他顶级文件,跨平台

python - 通过 Python/Fabric 从命令行更改 Unix 密码

unix - xv6 KERNBASE 限制进程内存

linux - 在 unix 一行中将 *.foo 更改为 *.bar

windows - VarToDateTime(VarDateFromStr) 使用哪种日期格式?

python - 安装Python GTK