zoukankan      html  css  js  c++  java
  • 4.进程操作与进程通信

    进程创建

    1. 父进程创建若干个子进程:后者再创建其子进程:以此内推,构成了反映"传承"关系的一颗进程树

    子进程的资源

    1. 子进程共享父进程的所有资源
    2. 子进程共享父进程的部分资源
    3. 子进程不从父进程共享资源,重新独立申请

    执行代码的执行顺序

    1. 父进程和子进程并发执行
    2. 父进程在子进程执行期间等待,待子进程执行完毕后才恢复执行余下代码

    linux c代码:

     1 #include <stdio.h>
     2 #include <sys/types.h>
     3 
     4 int main(void)
     5 {
     6     pid_t pid;
     7     pid = fork();//创建子进程,返回的是创建的子进程的编号
     8                  //创建完成之后等待父进程让出cpu进行执行,子进程创建时深拷贝父进程的资源
     9                  //子进程执行时不执行此行代码
    10     if(pid<0)//创建进程出错
    11     {
    12         printf("Fork Failed");
    13         exit(-1);
    14     }
    15     else if(pid==0)//子进程执行时候的代码
    16     {
    17         printf("这是子进程的输出:
    ");
    18         execlp("/bin/ls","ls",NULL);
    19     }
    20     else//父进程执行
    21     {
    22         wait(NULL);//父进程等待子进程完成执行
    23         printf("子进程创建完毕,父进程退出
    ");
    24         exit(0);
    25     }
    26     return 0;
    27 }
    fork

    运行结果:

    进程终止

    "进程终止"的语义之一:子进程执行完成最后一条指令后,要求操作系统将自己杀出(exit).语义动作含:

    •   子进程传递数据给父进程(通过父进程的wait操作)
    •   子进程的资源被操作系统收回

    "进程终止"语义之二:父进程终止子进程的执行(abort).终止原因可能是:

    •   子进程超额使用系统资源
    •   早前交给子进程执行的任务,过期无效了

    进程与进程不能完全独立,还要进行进程间合作

    •   独立进程不会影响其他进程的执行,也不会被影响
    •   合作进程影响其他进程,或者受其影响
    •   进程间合作是必须的,带来的好处:

        1.共享信息

        2.加速(计算)执行速度

        3.模块化

        4.方便调用,等等......


     

    一个经典问题:生产者-消费者问题

      生产者进程"生产"出消息,存储在缓冲区,供消费者进程"消费"

    共享内存的解决方案

    数据结构:

      #define BUFFER_SIZE 10

      Typedef   struct{

        .......

      }item;

      item buffer[BUFFERSIZE];

      int in=0;

      int out = 0;

    解决方案可行

    但是只能用足BUFFER_SIZE-1个缓冲单元

    生产者:

     

    消费者:

    两个变种


    同步通信和异步通信

     同步通信

      发送操作send:发送进程等待,直至接受到进程确认收到消息

      接受操作receive:接受进程等待,直至有个消息到达

    异步通信

      发送操作send:发送进程发出消息后即返回,该干什么干什么,不理会消息是否送达

      接收操作receive:接收进程执行一次接收动作,要么收到一条有效消息,要么收到空消息

     

     

     

     

     

     

  • 相关阅读:
    hdu-2084 数塔
    hdu-2151 Worm
    hdu-1234开门人和关门人
    hdu-1715大菲波数
    linux应用之vsftp服务的安装及配置(centos)
    linux应用之tomcat的安装及配置(centos)
    linux应用之nginx的安装及配置(centos)
    linux启动过程详解
    linux应用之Mongodb的安装及配置(centos)
    linux应用之apache服务的安装及配置(centos)
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8026780.html
Copyright © 2011-2022 走看看