进程分配

Posted muzihuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程分配相关的知识,希望对你有一定的参考价值。

筛质数进阶

之前筛质数程序创建了201个子进程,由于进程号有限,所以可以采用以下三种方法

1、分块法:将201个子进程分成N等份。eg:N=3,那么201个子进程平均分成3份

技术分享

2.交叉分配法:将201个子进程依次分配给N个进程

 

技术分享

3.进程池:用一个进程取质数,并将其丢给下边的线程或者进程处理质数

技术分享

=====================================================================

交叉分配法:

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

#define LEFT    30000000
#define RIGHT   30000200
#define N       3

int main(void)
{
    int i , j , mark , n;
    pid_t pid ;

    for(n = 0 ; n < N ; n++)
    {
        //1.父进程创建3个子进程
        pid = fork();
        //2.失败判断(并不完善)
        if(pid < 0)
        {
            perror("fork()");//需要将之前fork的释放
            exit(1);
        }
        //3.子进程
        if(pid == 0)
        {
            for(i = LEFT+n ; i <= RIGHT ; i+=N)
            {
                mark = 1 ;
                for(j = 2 ;j < i/2 ; j++)
                {
                    if(i % j == 0)
                    {
                        mark = 0 ;
                        break;
                    }
                }
                if(mark)
                    printf("[%d]%d is a primer\n",n,i);
            }
            exit(0);
        }
    }
    //4.收尸
    for(n = 0 ; n < N ; n++)
        wait(NULL);
    exit(0);
}

结果:

[1]30000001 is a primer
[2]30000023 is a primer
[1]30000037 is a primer
[2]30000041 is a primer
[2]30000059 is a primer
[1]30000049 is a primer
[1]30000079 is a primer
[2]30000071 is a primer
[1]30000109 is a primer
[2]30000083 is a primer
[1]30000133 is a primer
[2]30000137 is a primer
[1]30000163 is a primer
[2]30000149 is a primer
[1]30000169 is a primer
[2]30000167 is a primer
[1]30000193 is a primer
[1]30000199 is a primer

============================================================================

 

以上是关于进程分配的主要内容,如果未能解决你的问题,请参考以下文章

Java进程和线程

java 简单的代码片段,展示如何将javaagent附加到运行JVM进程

代码片段:Shell脚本实现重复执行和多进程

进程和线程和协程之间的关系

线程浅析

LINUX PID 1和SYSTEMD PID 0 是内核的一部分,主要用于内进换页,内核初始化的最后一步就是启动 init 进程。这个进程是系统的第一个进程,PID 为 1,又叫超级进程(代码片段