【问题标题】:How to create 1 million processes如何创建 100 万个进程
【发布时间】: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*) &parameter);
        if(thread0 != 0) printf("\ncan't create thread\n");
        pthread_join(tidp, NULL);
    }
}

return 1;

}

【问题讨论】:

  • ulimit -u 说什么?这是您的每用户进程限制。
  • 我不知道任何操作系统会允许一百万个进程。
  • 我的意思是随后运行它们,为混乱道歉。 - 每个线程和进程都应该在另一端之后运行。每个进程和线程绝对什么都不做
  • 你为什么要建造一个暖风机?你不能只从当地的电器店买一个吗?
  • @MartinJames:它在问题中说,“简单地比较创建 100 万个进程与线程的性能”。所有性能测量都是室内加热器。

标签: c multithreading performance process fork


【解决方案1】:

在您的代码中,每个孩子都会立即创建另一个孩子。所以你没有连续运行这些进程。每个父级在其子级退出之前不会退出,因此实际上您正在尝试同时创建 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);
        }
    }
}

【讨论】:

  • 谢谢!这是我的结果:100 万个进程实际 2m59.607s ;100 万个线程实际 0m43.103s
猜你喜欢
  • 1970-01-01
  • 2011-09-14
  • 2016-01-24
  • 2021-12-14
  • 2018-10-31
  • 2016-03-19
  • 1970-01-01
  • 2018-08-30
  • 1970-01-01
相关资源
最近更新 更多