GIL与异步回调
07.07自我总结
一.GIL
1.概念
在CPython中,这个全局解释器锁,也称为GIL,是一个互斥锁
2.带来的问题
首先必须明确执行一个py文件,分为三个步骤
- 从硬盘加载Python解释器到内存
- 从硬盘加载py文件到内存
- 解释器解析py文件内容,交给CPU执行
- 当进程中仅存在一条线程时,GIL锁的存在没有不会有任何影响
- 当有多个进程的时候,多个进程会争抢python解释器,这时候为了数据安全我们会上锁,从而让两个同时运行的程序从并发状态变成串行影响了程序的速度
3.GIL与GC进程的关系
GC进程当内存占用达到某个阈值时,GC会将其他线程挂起,然后执行垃圾清理操作,垃圾清理也是一串代码,也就需要一条线程来执行。
GIL的加锁与解锁时机
加锁的时机:在调用解释器时立即加锁
解锁时机:
- 当前线程遇到了IO时释放
- 当前线程执行时间超过设定值时释放
二.异步回调
同步
指的是 提交任务后必须在原地等待 直到任务结束
异步
提交任务后不需要在原地等待 可以继续往下执行代码
异步效率高于同步 ,异步任务将导致一个问题 就是 任务的发起方不知道任务何时 处理完毕
解决方法:
-
轮询 重复的隔一段时间就问一次 效率低 无法及时获取结果 不推荐
-
让任务的执行方主动通知 (异步回调)可以及时拿到任务的结果 推荐方式
- 多进程与多线程中相当于jion函数来告诉我们这个子有没有运行结束
- 在队列中的jion来告诉我们队列有没有被取完
- 在线程池与进程池中相当于result()来告诉我们有没有结束,且result还会打印方法的返回值
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理