并发编程2

守护进程

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

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

  将进程的daemon属性设置为True时这个进程变成了守护进程,设置daemon属性时必须在开始进程之前

进程安全

  使用Lock来实例化产生一把锁,但是要保证每一个进程访问的都是同一把锁

  在访问共享资源前加锁(acquire),访问完毕后要解锁(release)

  注意:不能多次加锁必须在解锁后才能再次加锁

  加锁可以保证多个进程修改同一块数据时,同一时间只能有一个任务可以进行修改,即串行修改,牺牲了速度保证了数据安全

  在使用锁的时候,无可避免的会降低效率需要找到一个最合适的地方加上锁,锁住的代码越少效率越高

join 和 锁

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

  粒度(被锁住的代码)越少效率越高

互斥锁

  相互排斥对方的锁

  一个进程在执行时另一个进程会等待

IPC 进程间通讯

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

四种通讯方式:

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

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

    缺点:速度慢

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

    通过Manager来开辟

    优点:速度快

    缺点:数据量不能太大

  3 管道

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

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

  4 socket

    不仅可以用于远程计算机中的进程通讯,还可以用于本地进程通讯基于内存,速度快

Queue

  队列是一个容器

    特点:先进先出,支持进程间数据共享,自动处理了进程安全问题(加锁)

    通过put来加数据,通过get获取数据

生产者消费者模型

  将原本由一个进程完成的事拆分为两个,交给两个不同的进程(生产者,消费者)来完成

  由于进程间内存相互隔离,所以需要为两个角色之间提高一个共享数据的容器

  生产者将生产完成的数据放入容器

  消费者从容器中取出数据来处理

  生产者消费者模型的优点:

    1 平衡了生产者和消费者之间的能力差异,提高处理效率

    2 降低双方的耦合度

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

原文地址:https://www.cnblogs.com/LinChengcheng/p/10484568.html