守护进程,进程安全,IPC进程间通讯,生产者和消费者模型

守护进程

  它本身也是一个进程,可以守护着另一个进程

  一个进程a设置为b的守护进程,当b结束时,a会立马结束自己,不管任务是否执行完毕

 

  使用场景

    例如:QQ进程有一个下载任务交给了一个子进程,但是过程中QQ退出了,下载进程也可以随之关闭了

    

  守护进程必须放在开启之前 

 

进程安全问题

  当多个进程要同时操作同一个资源时,就可能出现问题

  例如:

    只有一台打印机,但有很多打印任务,如果不加以控制,可能造成打印结果错乱

    解决方案:加join,将原本并发的任务变成了串行执行

    但是,如此一来进程与进程之间就不再平等,顺序就已经固定死了

 

最终的解决方案就是加锁

  如果使用Lock来实例化产生一把锁

  但是要保证每个进程访问的都是同一把锁

 

  在访问共享资源前加锁 

  访问完毕后一定要解锁

 

  注意:不能多次执行acquire 一次acquire就对应一次release

        acquire是一个阻塞函数,会一直等到锁被释放(release调用)才会执行

  加锁之后并发又变成串行了,不过与join不同的是没有规定顺序,谁先抢到就是谁先执行

  

  问题:一旦加锁效率降低,不加锁数据就要错乱

        在使用锁的时候,无可避免的会降低效率

        需要找到一个最合适的地方加上锁

        你锁住的代码越少效率越高

 

join和锁的区别

  join是固定死了执行顺序,程序也变成了串行 

  join是让整个进程中的代码全部串行,而锁可以只让部分代码串行

  粒度(被锁住的代码量)越小,效率越高

 

互斥锁

  互相排斥对方

  a在执行,b就无法执行

 

IPC是进程间通讯

  进程与进程之间内存是物理隔离的,无法直接通讯

  例如:QQ要调用浏览器来显示某个网页,网页的地址就必须想办法告诉浏览器

 

  1.使用一个共享文件,在硬盘创建一个文件,不同进程之间共享这个文件

    优点:交换的数据量几乎没有限制

    缺点:速度慢

  2.系统开辟一块共享内存来供进程间交换数据

    优点:速度快

    缺点:交换的数据量不能太大

  3.管道

    优点:封装了文件的打开关闭等操作

    缺点:速度慢并且是单向的,编程的复杂度较高

  4.socket

    不仅可以用于与远程计算机中的进程通讯,还可以用于与本地进程通讯

    基于内存的,速度快

 

队列也是一个容器

  特点:先进先出

    自动处理进程间的安全问题(加锁)

  例如:迅雷下载,先添加的任务一定先开始执行

  put:会阻塞直到有空位置为止
  set:会阻塞到有数据为止

  block:阻塞

  timeout:等待超时,只有block为True时才有效

 

堆栈:

  特点:先进后出

  例如:函数的执行,还有吃薯片,都是从最先吃上面

 

生产者消费者模型

  模型即解决某个问题的套路

  问题:

    生产者辅助产生数据

    消费者处理数据

    当消费者与生产者的能力不匹配时,必须一放等待另一方,这样效率就变低了

  

  生产者和消费者模型的优点:
    1.平衡生产者和消费者之间的能力差异,提供处理效率

    2.降低了双方耦合度

  学习并发的两个核心问题是安全性和效率

   


 

 

 

 

 

posted @ 2019-03-06 15:15  -Rye-  阅读(119)  评论(0)    收藏  举报