Hasty Briefsbeta

双语

Epoll and Kqueue: How Operating Systems Learned to Wait Efficiently

4 hours ago
  • I/O 最难的部分是知道何时停止等待,而不是读取数据,早期的操作系统对等待的处理很糟糕。
  • select 和 poll 每次调用都需要扫描所有文件描述符,使得开销与连接数呈线性关系。
  • epoll 和 kqueue 使用注册模型:只需告诉内核一次,内核在事件发生时通知,使得等待时间与活动量成比例。
  • epoll(Linux)支持水平触发和边缘触发模式;kqueue(BSD)更通用,可监控文件、信号、定时器等。
  • 这些 API 从用户空间轮询转向内核驱动通知,使得能够处理成千上万的连接。
  • Go 的运行时代理使用 epoll/kqueue 来阻塞 goroutine 而不阻塞操作系统线程,透明地实现了大规模并发。