gpt4 book ai didi

c++ - 写入管道的最快方法

转载 作者:太空宇宙 更新时间:2023-11-04 09:48:47 27 4
gpt4 key购买 nike

我写了这个程序,其中一部分,一个线程获取 char* 缓冲区并将它们写入管道创建如下:

 ret_val = mkfifo(lpipename.c_str(), 0666);
pipehandler = open(lpipename.c_str(), O_RDWR);

然后我将一个缓冲区一个接一个地写入管道,如下所示:

 int size = string(pcstr->buff).length()
numWritten = write(pipehandler, pcstr->buff, size);

每个 pcstr->buff 都是一个指向预配置大小为 1-5 MB 的 malloc 大小的指针

但是,写入 pipe 所花的时间比填充 pcstr->buff(来自另一个来源)所花的时间要长,而且它使我的程序运行太慢。

有没有人知道更快的写作方法?

谢谢

最佳答案

each pcstr->buff is a pointer to a malloc'ed size of a pre-configured size of 1-5 MB

只需将长度保存在某处即可。将它复制到 std::string 只是为了找出它的大小是相当浪费的。或者使用 strlen()

however, it takes to long to write to the pipe , than it does to fill the pcstr->buff (from another source) and it for makes my program run too slow.

In Linux the default maximum pipe buffer size is 1Mb as of today .您提到您向管道中写入了超过 1Mb 的数据。当这种情况发生时,写入线程会阻塞,直到管道中的一些数据被消耗掉。

Does anyone have any idea of a faster writing method?

/dev/shm/tmp 中使用普通文件。在最新的 Linux 中,/tmp 是一个内存文件系统。这仅在通过管道发送的数据量可以保存在文件中而不会溢出可用磁盘空间或内存的情况下才有效。

关于c++ - 写入管道的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13394064/

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