进程分配

筛质数进阶

之前筛质数程序创建了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

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

时间: 2024-11-10 08:14:15

进程分配的相关文章

给进程分配cpu核心

新负责的程序采用生产者和消费者的模式,生产者的速度非常快,数据几乎都在内存里,处理起来很快.而消费者要频繁的I/O.所以打算给生产者和消费者分配不一样的核心. 生产者只需要一个核心就够了,其余分配给消费者. 查了下这方面的资料,shell端有taskset命令可用. taskset: -p 正在运行的进程pid -c 列表形式显示指定cpu -v version -h help 用法:i.e. # taskset -cp 1,2,3 4321 # taskset -c 1,2,3-5 /usr/

内存分配原理 -进程分配内存的两种方式,分别有系统调用完成brk() 和mmap()(不设计共享内存)

如何查看进程发生缺页中断的次数? 用ps -o majflt,minflt -C program命令查看. majflt代表major fault,中文名叫大错误,minflt代表minor fault,中文名叫小错误.           这两个数值表示一个进程自启动以来所发生的缺页中断的次数. 发成缺页中断后,执行了那些操作? 当一个进程发生缺页中断的时候,进程会陷入内核态,执行以下操作: 1.检查要访问的虚拟地址是否合法 2.查找/分配一个物理页 3.填充物理页内容(读取磁盘,或者直接置0

设置NGINX进程分配至多核CPU提升性能

Nginx 配置文件 nginx.conf 首先需要找到 Nginx 的配置文件 nginx.conf 才能进行下面的操作,在LNMP一键安装包默认配置下,nginx.conf 存放在/usr/local/nginx/conf/nginx.conf至于其他环境下安装 Nginx 可以用find / -name nginx.conf来查找配置文件的存放路径. Nginx worker_processes进程数设置 Nginx 的配置文档 nginx.conf 中可以设置 worker_proces

Zookeeper实践之:通过Zookeeper实现一个消费者进程分配程序

背景 需要实现一个分布式监控程序,Agent把监控消息发送到Kafka,由消费者进程使用High Level API从Kafka获取消息 需求 随着Agent数量的增加,每秒产生的消息数量也在增加,考虑到High Level的API使消费者进程与分区的固定关系,所以需要使用Zookeeper来维护一个消费者的集群,使消费者可以根据Kafka分区的数量以及消费者集群的个数,动态的分配每个消费者节点上运行的消费者进程数 实现 package com.eric.hadoop.zookeeper.coo

C/C++程序内存分配(和Linux进程分配有一些区别)

C/C++程序内存分配 一.一个由C/C++编译到程序占用的内存分为以下几个部分: 1.栈区(stack)--由编译器自动分配释放,在不需要的时候自动清除.用于存放函数的参数.局部变量等.操作方式类似数据结构中的栈(后进先出). 2.堆区(heap)--一般由程序员分配释放,若程序员分配后不释放,程序结束后可能由OS回收.不同于数据结构中的堆,分配方式有些类似链表. 3.全局区(静态区)--全局变量和静态变量存储在这里.程序结束后由系统释放.在以前到C语言中,全局变量又细分为初始化的(DATA段

Linux进程管理简谈

Linux系统进程管理简谈 进程是什么? 简单来说进程是一个正在执行的程序的一个副本,存在生命周期,有段指令和代码在不断运行. linux内核存储信息的固定格式:task struct 进程的相关信息存储在链表中 多个任务的task struct组件的链表:task list 进程的创建:父进程创建子进程(内核创建init进程,剩余一切进程有init及其子进程进程创建) 父进程创建子进程时向内核调用fork()来创建子进程并且通过调用clone()复制父进程的信息给子进程 Linux进程的优先级

进程和线程、内核空间等概念

用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方).操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限.为了保证用户进程不能直接操作内核(kernel),保证内核的安全,操作系统将虚拟空间划分为两部分,一部分为内核空间,一部分为用户空间.针对linux操作系统而言,将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为内核空间,而将较

Linux进程上下文切换过程context_switch详解--Linux进程的管理与调度(二十一)【转】

转自:http://blog.csdn.net/gatieme/article/details/51872659 版权声明:本文为博主原创文章 && 转载请著名出处 @ http://blog.csdn.net/gatieme 目录(?)[-] 前景回顾 1 Linux的调度器组成 2 调度工作 进程上下文 1 进程上下文的概念 2 上下文切换 context_switch进程上下文切换 1 context_switch完全注释 2 prepare_arch_switch切换前的准备工作

进程与进程描述符(task_struct)

一. 进程 进程(Process) 计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实体:在当代面向线程设计的计算机结构中,进程是线程的容器.程序是指令.数据及其组织形式的描述,进程是程序的实体. --------------------------------------------------------------- 释义:一段程序的执行过程 特征:动态.独立.异步.并发 结构特征