管道与 tmfile。什么更好,为什么?

发布于 2024-10-19 16:49:32 字数 101 浏览 2 评论 0原文

我想编写创建子进程并将其 stdout 和 stderr 流重定向到父进程的程序。那么为了获得良好的性能,tmpfile() 或 pipeline() 执行此操作的最佳选择是什么,为什么?

I want write program which creates child process and redirecting its stdout and stderr streams to parent. So what is good choice to do this for good performance tmpfile() or pipe(), and why?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

月野兔 2024-10-26 16:49:33

尽可能使用pipe,除非您希望在流中积累大量输入而不会被读取。管道将数据保存在 RAM 中,其中临时文件需要文件系统操作。文件上的 fdsync 比管道上的 fdsync 昂贵得多。管道也不易受到竞争条件引起的安全问题的影响。

如果您的应用程序无法使用管道语义(其输出需要文件系统路径或类似问题),请尝试使用“命名管道”(也称为 FIFO)。

Use pipe where possible, unless you expect large amounts of input to build up in the stream without being read. A pipe keeps data in RAM where a temporary file requires filesystem operations. An fdsync on a file will be much more expensive than on a pipe. A pipe is also less vulnerable to security issues caused by race conditions.

If your application cannot use pipe semantics (requires a filesystem path for its output or a similar problem), try using a "named pipe" (also called a FIFO).

无名指的心愿 2024-10-26 16:49:33

如果管道没有一个主要缺点:固定缓冲区大小,那么它们将是完美的。当使用管道时,缓慢的消费者会限制生产者,这反过来又会导致过多的上下文切换......

Pipes would be perfect if they did not have one major drawback: fixed buffer size. When using pipes a slow consumer throttles the producer, which in turn, causes too much context switching...

葬﹪忆之殇 2024-10-26 16:49:33

管道的主要缺点是它不可查找,也就是说,消费者无法向前跳跃或倒回。如果数据交换不需要此属性,那么管道是更好的选择。

The major drawback for a pipe is that it is not seekable, that is, the consumer cannot skip ahead or rewind. If the data exchange does not require this property, then a pipe is the better choice.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文