0

可能重复:
管道缓冲区大小是 4k 还是 64k?

  1. 在 linux 中,哪个头文件指定了可用于写入管道的大小?

  2. 我捕获每个可配置周期的主应用程序的延迟并将该数据写入管道。一个单独的报告过程会读取该管道。通常,主应用程序每秒交换大约 10,000 条消息。因此,给定一秒的周期,主应用程序为每个消息交换收集 10k 延迟数据点,然后将它们写入一秒边界上的管道。在这种情况下我有以下问题

    • 有没有办法在创建时指定管道的大小,所以我可以确保管道中有足够的写入空间?
    • 写入管道是否昂贵?管道是如何实现的?对管道的写入是否会针对某些 mmap 文件或内存缓冲区?
4

1 回答 1

1
  • 有没有办法在创建时指定管道的大小? 也许。从 Linux 2.6.35 开始,您可以使用fcntl(2)F_SETPIPE_SZ管道缓冲区设置为/proc/sys/fs/pipe-max-size. 在早期版本中,没有,但我想您可以改用套接字机制。大多数情况下它会比较慢,但是您可以指定缓冲量到 wmem_max,请参阅 socket(7),并且您可以对内核内存分配进行某些其他控制。
  • 写入管道是否昂贵? ,但是 write(2)内核调用,因此管道 I/O 应尽可能缓冲。
  • 管道是如何实现的?使用内核代码将数据传入和传出系统缓冲区缓存。
  • 对管道的写入是否会针对某些 mmap 文件或内存缓冲区? 这是一个内存缓冲区
于 2012-12-16T22:58:14.987 回答