GIL与异步回调

07.07自我总结python

一.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还会打印方法的返回值 ​
相关文章
相关标签/搜索