• 并发编程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 降低双方的耦合度

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

  • 相关阅读:
    类特性:多态
    类特性:继承
    类,对象入门
    cf round599 CDE
    cf round#598 CDEF
    高精度小数BigDecimal+二分——java
    点分治
    java——IO(普通文件,二进制文件,压缩文件 )
    JCF——Map
    JCF——set
  • 原文地址:https://www.cnblogs.com/LinChengcheng/p/10484568.html
Copyright © 2020-2023  润新知