c - 这个写入管道的程序能否针对性能进行优化?
问题描述
我制作了一个示例程序作为模型,它需要计算比现在的示例乘法更复杂的任务。有人告诉我,我制作的这个示例程序可以进行优化以获得更好的性能。有什么可以改进的吗?也许使用多个管道?
目前程序派生了第二个进程,父进程将一个变量写入管道,子进程读取它并进行计算,写入同一个管道,当子进程完成执行时,父进程最终读取管道。
#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;
}
解决方案
推荐阅读
- clojure - 使用deps.edn时如何从本地jar文件导入openpdf-1.3.23.jar?
- mysql - MySQL Docker 容器中长时间运行的 SQL 语句导致网络连接丢失
- jquery - 如果以大于零的数字开头,则 Google 折线图 y 轴边框缺失
- python - 在 Python 中打补丁
- python - python请求获得的页面与浏览器中看到的不同
- javascript - WebSocket/Node.js 帮助:无法建立到 wss://domain:8080 的连接 - 不是特定于浏览器的
- python - BeautifulSoup:查找具有给定属性的所有标签
- for-loop - 仅当数字未包含在行中时才附加
- sql - SQL:选择表中最少行的计数
- django - Django:使用带有外键的 __str__ 来返回一个项目