【发布时间】:2013-04-22 23:10:47
【问题描述】:
我的目标是简单地比较创建 100 万个进程和线程(按顺序)的性能。每个进程/线程什么都不做,它们只应在当前进程/线程完成后运行。
下面是我的代码。当我编译它时,我得到了几个错误实例:
-bash: fork: retry: Resource temporarily unavailable
发生了什么事?
这是我的代码:
int main(int argc, char* argv[]){
int numberOfActions = 0;
int i;
if(argc != 3){
printf("usage: <thread/process> <number_of_threads/processes>\n");
exit(1);
}
numberOfActions = atoi(argv[2]); //number of threads/processes
if(strcmp(argv[1], "p") == 0){
printf("process\n");
int pid;
int status;
for(i = 0; i < numberOfActions; i++){
pid = fork();
if(pid < 0){//fork failed
printf("fork failed\n");
exit(0);
}
else{//fork succeeded
if(pid == 0){//child
continue;
}
else{//parent
waitpid(pid, &status, WUNTRACED);
exit(0);
}
exit(0);
}
}
}
else{
printf("thread\n");
pthread_t tidp;
int thread0;
int parameter = 0;
for(i = 0; i < numberOfActions; i++){
thread0 = pthread_create(&tidp, NULL, &continueThread, (void*) ¶meter);
if(thread0 != 0) printf("\ncan't create thread\n");
pthread_join(tidp, NULL);
}
}
return 1;
}
【问题讨论】:
-
ulimit -u说什么?这是您的每用户进程限制。 -
我不知道任何操作系统会允许一百万个进程。
-
我的意思是随后运行它们,为混乱道歉。 - 每个线程和进程都应该在另一端之后运行。每个进程和线程绝对什么都不做
-
你为什么要建造一个暖风机?你不能只从当地的电器店买一个吗?
-
@MartinJames:它在问题中说,“简单地比较创建 100 万个进程与线程的性能”。所有性能测量都是室内加热器。
标签: c multithreading performance process fork