【问题标题】:What is faster, pipe|fifo什么是更快,pipe|fifo
【发布时间】:2014-10-21 11:52:07
【问题描述】:

Linux 中哪个更快:管道还是 fifo?理论上的管道更快,但我如何用 C 程序检查呢? 我尝试在 2 个 procces 之间发送消息,但是从发送到接收消息的时间仍然是 0 鲁莽的消息长度。

部分代码:

struct timeval start,end;
char mesaj[100000]="";
for(i=0;i<99999;i++)
   strcat(mesaj,"d");
gettimeofday(&start,NULL);
if(fork()==0)
{
    write(fd,mesaj,strlen(mesaj));
    exit(0);
 }
 read(fd,mesaj,strlen(mesaj));
gettimeofday(&end,NULL);
long time=(end.tv_usec-start.tv_usec)/1000 + (end.tv_sce-start.tv_sec)*1000;
printf("Fifo time &lu\n",time);

【问题讨论】:

  • 尝试发送1,000,000,看看哪个更快
  • 您的标签将苹果与橙子进行比较。 unix pipe 是一个实用的东西,而fifo 是一个概念。你到底在比较什么?
  • 在这部分代码中,我想使用 fifo 获取时间,我有使用管道获取时间的方法,是一样的,但是 fd 是 int fd[2],我之前启动了管道叉子。

标签: c linux pipe fifo


【解决方案1】:

fifo 与 linux 中的pipe 共享相同的实现,因此它们同样快。

两者的主要区别在于您如何创建/打开它们。

如果你想衡量它,你需要做可衡量的工作。例如尝试读/写 100MB 的数据(使用循环)。您还需要检查错误,因为衡量失败所需的速度并不是您想要的,并且您需要检查您是否实际读取和写入了 100MB。

【讨论】:

    【解决方案2】:

    read() 尝试从文件描述符 fd 中读取 count 个字节到 缓冲区从 buf 开始。

    这意味着如果您留在父进程中,您将读取 0 个字节并继续。您应该通知家长阅读已结束并忙于等待。尝试在父进程上使用信号或轮询文件,并在写入完成后向其写入 1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-07
      • 2018-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多