首页 > 解决方案 > 这个写入管道的程序能否针对性能进行优化?

问题描述

我制作了一个示例程序作为模型,它需要计算比现在的示例乘法更复杂的任务。有人告诉我,我制作的这个示例程序可以进行优化以获得更好的性能。有什么可以改进的吗?也许使用多个管道?

目前程序派生了第二个进程,父进程将一个变量写入管道,子进程读取它并进行计算,写入同一个管道,当子进程完成执行时,父进程最终读取管道。

#include<stdlib.h>
#include<stdio.h>
#include<unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int multi(int var) {
   int status;
   int multi;
   int pfd[2];
   if ( pipe(pfd) < 0 ) {
           perror("pipe");
       exit(EXIT_FAILURE);
   }
   int pid = fork();
   if (pid < 0) {
       printf("fork error\n");
       exit(0);
   }
   if (pid>0) {
       write(pfd[1], &var, sizeof(var));
       wait(&status);
       read(pfd[0], &multi, sizeof(multi));
       close(pfd[0]);
   } else {
       read(pfd[0], &var, sizeof(var));
       multi = 10 * var;
       write(pfd[1], &multi, sizeof(multi));
       close(pfd[1]);
       int pidchild = getpid();
       kill(pidchild, 9);
   }
   return multi;
}

int main(void) {
   int x;
   fscanf(stdin, "%d", &x);
   printf("%d\n", multi(x));
   return 0;
}

标签: c

解决方案


推荐阅读