【发布时间】:2012-11-15 08:50:20
【问题描述】:
我编写了这个程序,其中一个线程获取 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 (来自另一个来源)花费的时间太长,并且它使我的程序运行太慢。
有人知道更快的写作方法吗?
谢谢
【问题讨论】:
-
是否有理由不知道
pcstr->buff的大小(因此创建一个字符串只是为了计算它)? -
@R.MartinhoFernandes 是的...大小是从配置文件中接收的
-
但是你说的是第三个参数吗?
-
为什么不保存那个大小而不是一次又一次地计算它?
-
Write()可能会阻塞,因为您的数据对于内核的管道缓冲区来说太大了,因此它必须等待读取过程将其耗尽。您可能需要将流设置为非阻塞模式,并缓冲数据,以便在可用空间时写入。