C 如何创建100万个流程
我的目标是简单地比较创建100万个进程和线程(顺序)的性能。每个进程/线程都不做任何事情,它们应该只在当前进程/线程完成后运行 下面是我的代码。当我编译它时,我得到了几个错误实例:C 如何创建100万个流程,c,multithreading,performance,process,fork,C,Multithreading,Performance,Process,Fork,我的目标是简单地比较创建100万个进程和线程(顺序)的性能。每个进程/线程都不做任何事情,它们应该只在当前进程/线程完成后运行 下面是我的代码。当我编译它时,我得到了几个错误实例: -bash: fork: retry: Resource temporarily unavailable 发生了什么事 这是我的密码: int main(int argc, char* argv[]){ int numberOfActions = 0; int i; if(argc != 3){ pri
-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;
}
intmain(intargc,char*argv[]){
int numberOfActions=0;
int i;
如果(argc!=3){
printf(“用法:\n”);
出口(1);
}
numberOfActions=atoi(argv[2]);//线程数/进程数
if(strcmp(argv[1],“p”)==0){
printf(“过程\n”);
int-pid;
智力状态;
对于(i=0;i
在您的代码中,每个子项立即创建另一个子项。因此,您没有连续运行这些进程。每个父进程直到其子进程退出后才会退出,因此实际上您正试图同时创建100万个进程
相反,您可以这样做:
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
exit(0);
}
else{//parent
waitpid(pid, &status, WUNTRACED);
}
}
}
for(i=0;iulimit-u
说什么?这是你的每用户进程限制。我不知道有哪个操作系统会允许一百万个进程。我的意思是以后再运行它们,很抱歉造成混淆-每个线程和进程都应该在另一端之后运行。每一个进程和线程都毫无用处。你为什么要建造一个风扇加热器?MartinJames:你能不能从你当地的电器商店买一台?@MartinJames:问题中说,“简单地比较一下创建100万个进程和线程的性能”。所有性能测量均为房间加热器。谢谢!以下是我的结果:100万个进程实际2m59.607s;100万个线程实际0m43.103s