• GIL与异步回调


    07.07自我总结

    一.GIL

    1.概念

    在CPython中,这个全局解释器锁,也称为GIL,是一个互斥锁

    2.带来的问题

    首先必须明确执行一个py文件,分为三个步骤

    1. 从硬盘加载Python解释器到内存
    2. 从硬盘加载py文件到内存
    3. 解释器解析py文件内容,交给CPU执行
    • 当进程中仅存在一条线程时,GIL锁的存在没有不会有任何影响
    • 当有多个进程的时候,多个进程会争抢python解释器,这时候为了数据安全我们会上锁,从而让两个同时运行的程序从并发状态变成串行影响了程序的速度

    3.GIL与GC进程的关系

    GC进程当内存占用达到某个阈值时,GC会将其他线程挂起,然后执行垃圾清理操作,垃圾清理也是一串代码,也就需要一条线程来执行。

    GIL的加锁与解锁时机

    加锁的时机:在调用解释器时立即加锁

    解锁时机:

    • 当前线程遇到了IO时释放
    • 当前线程执行时间超过设定值时释放

    二.异步回调

    同步

    指的是 提交任务后必须在原地等待 直到任务结束

    异步

    提交任务后不需要在原地等待 可以继续往下执行代码

    异步效率高于同步 ,异步任务将导致一个问题 就是 任务的发起方不知道任务何时 处理完毕

    解决方法:

    • 轮询 重复的隔一段时间就问一次 效率低 无法及时获取结果 不推荐

    • 让任务的执行方主动通知 (异步回调)可以及时拿到任务的结果 推荐方式

      • 多进程与多线程中相当于jion函数来告诉我们这个子有没有运行结束
      • 在队列中的jion来告诉我们队列有没有被取完
      • 在线程池与进程池中相当于result()来告诉我们有没有结束,且result还会打印方法的返回值
  • 相关阅读:
    有向图的连通性
    P6149 [USACO20FEB]Triangles S
    P6148 [USACO20FEB]Swapity Swapity Swap S
    RabbitMQ六中工作模式-主题模式
    turbine 集群聚合监控
    RabbitMQ六中工作模式-路由模式
    RabbitMQ六中工作模式-发布和订阅模式
    RabbitMQ六中工作模式-工作模式
    RabbitMQ六中工作模式-简单模式
    feign 声明式客户端接口
  • 原文地址:https://www.cnblogs.com/pythonywy/p/11146937.html
Copyright © 2020-2023  润新知