zoukankan      html  css  js  c++  java
  • 守护进程-互斥锁-IPC

    守护进程?

             就是指用一个进程去守护另一个进程. 守护进程的代码非常简单: p.daemon = True 

             注意:必须在启动进程之前执行

    什么时候需要使用守护进程?

             例如: qq中有个下载视频   应该用子进程去做 但是 下载的过程中 qq退出  那么下载也没必要继续了

      

    互斥锁

             什么时候用锁?

                 当多个进程 同时读写同一份数据 数据很可能就被搞坏了

                第一个进程写了一个中文字符的一个字节 cpu被切到另一个进程

                另一个进程也写了一个中文字符的一个字节

                 最后文件解码失败

            

    问题之所以出现 是因为并发 无法控住顺序

                 目前可以使用join来将所有进程并发改为串行

    与join的区别?

        多个进程并发的访问了同一个资源  将导致资源竞争(同时读取不会产生问题 同时修改才会出问题)

        第一个方案 加上join  但是这样就导致了 不公平  相当于 上厕所得按照颜值来

        第二个方案 加锁  谁先抢到资源谁先处理[

        相同点: 都变成了串行

        不同点:

        1.join顺序固定 锁顺序不固定!

        2.join使整个进程的任务全部串行  而锁可以指定哪些代码要串行

        锁使是什么?

        锁本质上就是一个bool类型的标识符  大家(多个进程) 在执行任务之前先判断标识符

        互斥锁 两个进程相互排斥

        注意 要想锁住资源必须保证 大家拿到锁是同一把

    怎么使用?

        在需要加锁的地方 lock.acquire() 表示锁定

        在代码执行完后 一定要lock.release() 表示释放锁

        lock.acquire()

        放需要竞争资源的代码 (同时写入数据)

    lock.release()

    进程间的通讯

    IPC 指的是进程间通讯

            之所以开启子进程 肯定需要它帮我们完成任务 很多情况下 需要将数据返回给父进程

            然而 进程内存是物理隔离的

        解决方案:

        1.将共享数据放到文件中   这样有点慢

        2.管道   subprocess中的那个  管道只能单向通讯  必须存在父子关系

    3.共享一块内存区域  得操作系统帮你分配  速度较快

    进程间通讯的另一种方式 使用queue

        queue  队列

        队列的特点:

            先进的先出

            后进后出

                       get 和 put的使用

             

  • 相关阅读:
    android81 多线程下载和断电续传
    android80 HttpClient框架提交数据 get方式
    CentOS 7最小化安装后找不到‘ifconfig’命令——修复小提示
    Eclipse4.5在线安装Aptana插件及配置代码提示教程
    centos7 yum源
    ESXi License过期解决办法
    mysql grant 用户权限总结
    Unable to locate package错误解决办法
    华为USG6350防洪墙SNMP最简单功能配置
    ssl_error_weak_server_ephemeral_dh_key
  • 原文地址:https://www.cnblogs.com/zhouhai007/p/9931524.html
Copyright © 2011-2022 走看看