gpt4 book ai didi

linux - 高容量缓冲区 fifo 或使用文件作为 fifo 的缓冲区

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:05:45 25 4
gpt4 key购买 nike

在 bash 脚本中,我使用管道将命令的输出传递给另一个命令的输入:

$ output_com | input_com

output_cominput_com 慢。在我的脚本中,在input_com 准备运行之前,还需要执行一些其他命令。

为了加快速度,我想在脚本开头启动 output_com,输出到某种高容量 fifo,执行其他需要完成的命令,然后执行 input_com 与输入的 fifo。像这样:

#!/bin/bash
#
mkfifo /tmp/fifo
output_com > /tmp/fifo &

somecommand1
somecommand2
input_com < /tmp/fifo

不幸的是,fifos 的缓冲区大小对于我的用例来说太小了,所以 output_cominput_com 开始读取之前很快就被阻塞了。这些命令之间共享的数据量大约从 500MB 到 1GB 不等。

是否有某种我不知道的机制、工具或概念允许 output_cominput_com 开始读取之前开始缓冲 fifo 上的许多 MB?

例如,如果 fifo 缓冲区可以由 tmp 文件(hdd 用作缓冲区)烘焙,那就太好了,但我还没有找到如何做到这一点。使用一个简单的文件是非阻塞的,并使 input_comoutput_com 完成之前终止。

最佳答案

有一个工具叫做 buffer这就像一个更大的管道。大多数发行版默认不安装它,但可以从包管理器安装它。

#!/bin/bash
#
mkfifo /tmp/fifo
output_com | buffer -m 1024m -s 512k > /tmp/fifo &

somecommand1
somecommand2
input_com < /tmp/fifo
wait

遗憾的是,手册没有指定 buffer 可以使用的最大块数,也没有指定缓冲区的最大大小,但这应该给你一个 1GiB 的缓冲区。

关于linux - 高容量缓冲区 fifo 或使用文件作为 fifo 的缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47039755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com