0

我编写了这个程序,其中一个线程获取 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 (来自另一个来源)花费的时间太长,并且它使我的程序运行速度太慢。

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

谢谢

4

1 回答 1

2

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

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

但是,写入管道需要很长时间,而不是填充 pcstr->buff (来自另一个来源),这会使我的程序运行速度太慢。

在 Linux 中,截至今天,默认的最大管道缓冲区大小为 1Mb。您提到您在管道中写入了超过 1Mb 的数据。当这种情况发生时,写入线程会阻塞,直到管道中的一些数据被消耗。

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

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

于 2012-11-15T09:16:50.900 回答