当前位置: 首页 > news >正文

Python异步编程asyncio(二):Selector

1 引言

上一篇文章中我们已经知道,Event Loop 是异步程序的大脑,负责任务调度,且它绝对不能被阻塞。但你可能会好奇:当 Event Loop 在等待一个网络请求或文件读写时,它是在原地“转圈圈”盲目轮询,还是在闭目养神?

这就引出了我们今天要聊的底层功臣——Selector(选择器)。如果说 Event Loop 是指挥家,那么 Selector 就是指挥家的耳朵。

2 异步 I/O 模型:Reactor 和 Proactor

asyncio 实际上在底层适配了两种截然不同的“反应模式”:ReactorProactor

处理异步 I/O 操作时,根据操作系统底层机制的不同,主要分为以下两种模式:

  • Reactor 模式(反应堆模式):主要用于 Unix/macOS 系统。它的逻辑是“对就绪状态做出反应”。当系统发现某个文件描述符(FD)已经准备好进行读写操作时,它会通知 Event Loop,由 Loop 来触发相应的回调函数。
  • Proactor 模式(前摄器模式):主要用于 Windows 系统。它基于 I/O 完成端口(IOCP)。与 Reactor 不同,Proactor 是“对完成事件做出反应”。IOCP 允许一组线程等待 I/O 完成事件。当一个异步 I/O 操作真正执行完毕时,其中一个线程会处理该事件。如果事件瞬间爆发,超过了线程的处理能力,IOCP 会自动排队等待后续处理。

虽然底层机制千差万别——BSD/macOS 使用 kqueue,Linux 使用强大的 epoll,Solaris 使用 dev/poll,而 Windows 则使用 SelectIOCP。但作为开发者,我们不需要为每个系统写一套逻辑。

Python 的 selectors 模块提供了一个高级的、平台无关的接口。它会自动探测当前平台上最高效的系统调用,并将其统一封装。

如果你需要手动指定一个特定的选择器(例如在调试时强制使用最基础的 Select),可以参考如下配置:

import asyncio
import selectors # 显式使用 Select 机制的选择器
selector = selectors.SelectSelector()
# 将该选择器注入到 Event Loop 中
loop = asyncio.SelectorEventLoop(selector)
asyncio.set_event_loop(loop)

3 源码视角的家族谱系

asyncio 的内部实现中,这些事件处理器的继承关系非常严谨。我们可以通过下面这张结构图清晰地看到从抽象接口到具体平台实现的演变:

graph TDsubgraph events.pyA[Abstract*]endsubgraph base_events.pyB[Base*]endsubgraph selector_events.pyC[BaseSelector*]endsubgraph proactor_events.pyD[BaseProactor*]endsubgraph unix_events.pyE[Selector*]endsubgraph windows_events.pyF[Selector*]G[Proactor*]end%% 关系A --> BB --> CB --> DC --> EC --> FD --> G
  • Abstract/Base 层定义了 Loop 的基本行为。
  • Selector 系列 实现了基于“就绪通知”的 Reactor 模式,覆盖了 Unix 家族和 Windows 的基础兼容模式。
  • Proactor 系列 则专为 Windows 的 IOCP 高效模型设计。

4 总结

Selector 不仅仅是一个简单的过滤器,它是 asyncio 实现跨平台高性能的关键。它通过 Reactor 模式适配了类 Unix 的灵活性,通过 Proactor 模式挖掘了 Windows 的并发潜力。

http://www.jsqmd.com/news/344791/

相关文章:

  • 2026年壁挂炉维修公司权威推荐:博世壁挂炉24小时维修、博世壁挂炉官方维修、史密斯热水器官方维修、威能壁挂炉官方维修选择指南 - 优质品牌商家
  • GPU 应该怎么选择?写给 AI 工程师的 GPU 选型指南
  • 2026年热门的主动防振基座/防微振基座热门品牌厂家推荐 - 品牌宣传支持者
  • 2026年管道预制设备费用,前山管道温度适应性和口碑情况探讨 - myqiye
  • 麻雀搜索算法(SSA)优化bp网络(matlab代码)
  • 2026年GEO优化公司推荐:技术驱动与垂直深耕评测,涵盖工业制造与专业服务场景 - 品牌推荐
  • (AI答复)企业级自动化运维平台 Ansible Tower 的收费模式、功能限制及替代方案
  • 智谱AI开源GLM-Image:自回归+扩散双引擎驱动的多模态图像生成新范式
  • 低查重AI教材编写指南:工具选择与使用技巧全解析
  • 剖析不错的清洁片代工厂家,哪家性价比高值得关注 - mypinpai
  • 2026年优质的太仓GEO优化/太仓GEO品牌优选榜 - 品牌宣传支持者
  • 2026年靠谱的上海GEO流量/上海GEO投放企业口碑精选 - 品牌宣传支持者
  • 低查重AI教材编写秘籍,借助AI工具,轻松搞定教材难题
  • 樱桃叶病害数据集
  • 2026年热门的厂房钢结构/大型车间钢结构厂家选购参考汇总 - 品牌宣传支持者
  • Flutter for OpenHarmony 实战:打地鼠游戏完整开发指南
  • 2026年评价高的全空气辐射五恒系统公司推荐:长沙绿建/AI五恒系统/光伏/全空气五恒系统/内墙保温/地下室防霉防潮/选择指南 - 优质品牌商家
  • 题解:回家
  • 2026年评价高的工业仪表显示屏,液晶模块显示屏厂家采购指南及推荐 - 品牌鉴赏师
  • 2026.02.05
  • Flutter for OpenHarmony 实战:打地鼠游戏难度设计与平衡性
  • 瑞祥商联卡线上回收流程详解:快速、安全、简单 - 团团收购物卡回收
  • 大模型应用的模型架构和核心技术原理-以DeepSeek对话助手为例分析
  • 2026年可靠的抗震储能屏,防水触摸屏,宽温储能屏厂家行业热门推荐 - 品牌鉴赏师
  • 如何通过Java SDK获取Collection
  • 2026年正规的常熟GEO排名/常熟GEO品牌人气推荐 - 品牌宣传支持者
  • HOS-MAKE: AI驱动的代码加密系统,为开发者打造“自私“的代码保护神
  • 2026年推荐张家港GEO建站/张家港GEO品牌客户好评推荐 - 品牌宣传支持者
  • 不容错过!低查重的AI教材生成工具,让AI写教材更简单
  • LVM动态扩容完全指南|小白也能上手,零停机扩展磁盘空间(5种方法)