2026-06-04 Daily

🧠 今天记录

  • for loop 协程 一个线程管理上千并发连接

它具体在干什么

伪代码长这样:

while True: # 检查哪些协程的 await 已经有结果了(I/O 完成、timer 到期等) ready = 检查所有等待中的事件()

for 协程 in ready:
    协程.send(None)  # 让这个协程从上次 await 的地方继续跑
    # 协程跑到下一个 await 又挂起,控制权回到这里

举个具体例子

async def handle_request(): result = await engine_core.add_request_async() # ← 挂起 return result

  1. handle_request 跑到 await,把”我在等 ZMQ 的响应”告诉 event loop,然后挂起
  2. event loop 继续循环,去跑别的协程(比如另一个请求)
  3. ZMQ 响应回来了,OS 通知 event loop “这个 socket 有数据了”
  4. event loop 把 handle_request 放回 ready 列表
  5. 下一轮循环跑到它,从 await 后面继续执行

本质

event loop 就是 I/O 多路复用的调度器,底层依赖操作系统的 epoll(Linux)或 kqueue(macOS)来同时监听多个 socket/文件描述符,有事件就通知对应的协程继续跑。一个线程,管理成百上千个并发连接。

  • [ ]

🚀 今日TODO

  • [ ]

🧩 遇到的问题 / 卡点

  • [ ]

📌 明天该干啥

  • [ ]

💡 随手记录