linux – 完整的64K是否用于创建的每个管道?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux – 完整的64K是否用于创建的每个管道?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1553字,纯文字阅读大概需要3分钟。
内容图文
![linux – 完整的64K是否用于创建的每个管道?](/upload/InfoBanner/zyjiaocheng/965/904c12425da147e3bcbf8c46e6454f50.jpg)
如何实现管道重新缓冲?我可能会创建许多管道,但一次只能通过它们发送/接收几个字节,因此不要浪费不必要的内存.
编辑:我明白缓冲是什么,我问的是如何在Linux管道中专门实现缓冲,即无论高水位标记如何分配完整的64K?
解决方法:
缓冲区用于平衡生产者和消费者之间的速度差异.如果您没有缓冲区,则必须在生成每个字节后切换任务,由于上下文切换的成本,数据和代码缓存永远不会变热等,这将是非常低效的.如果您的消费者可以生成有关的数据当生产者消耗它时,你的缓冲区使用率通常很低(但要继续阅读).如果生产者比消费者快得多,缓冲区将完全填满,生产者将被迫等待更多空间可用.慢速生产者和快速消费者的相反情况在大多数情况下将使用缓冲区的一小部分.
用法还取决于您的两个进程是否实际并行运行(例如,在单独的核心上),或者它们是否共享核心,并且仅由于操作系统的进程管理被误认为它们是并发的.如果你有真正的并发(单独的核心/ CPU),你的缓冲区通常会少用.
无论如何,如果你的应用程序没有产生太多数据并且它们的速度相似,那么缓冲区在大多数情况下都不会很满.但是,如果在操作系统级别,我不会感到惊讶,任何方式都会分配完整的64 kB.但除非你使用嵌入式设备,否则64 kB并不多,所以即使总是分配最大尺寸,我也不用担心.
顺便说一句,修改管道缓冲区的大小并不容易,例如在this discussion中建议了一些技巧,但它们实际上是修改缓冲区数据消耗方式的解决方法,而不是修改实际的缓冲区大小.您可以检查ulimit -p但我不是100%确定它会为您提供所需的控件.
编辑:在Linux代码中查看fs/pipe.c和include/linux/pipe_fs_i.h,看起来缓冲区确实改变了它们的大小.但是,缓冲区的最小大小是一个完整的页面,所以如果你只需要几个字节,就会有浪费.我现在还不确定,但是一些使用PIPE_DEF_BUFFERS的代码是16,给出64 kB和4 kB页面,这让我想知道缓冲区是否可以降到64 kB以下(最小1页可能只是一个额外的限制) ).
内容总结
以上是互联网集市为您收集整理的linux – 完整的64K是否用于创建的每个管道?全部内容,希望文章能够帮你解决linux – 完整的64K是否用于创建的每个管道?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。