\设备\Afd,或者,使异步 Rust 在 Windows 上运行的与魔鬼的交易

主要观点:作者今天感觉很邪性,提到 Windows 网络代码像用胶带粘在系统上,介绍了 Windows 的 WinSock 及其存在的问题,如对大量套接字效率低等,还对比了 Unix 的epollkqueue,指出 Windows 没有类似的高效 polling API,只有WSAPoll且需 I/O 操作才能唤醒,而 Windows 的输入/输出完成端口(IOCP)虽好但与Future模型和 Rust 的借用检查器不兼容,进而提出通过与 Auxillary Function Driver(AFD)直接交互来解决问题,介绍了访问 AFD 的步骤,但也提到使用不稳定且未记录的 API 如\Device\Afd存在风险,如在 Wine 上未实现等。

关键信息:

  • Windows 网络代码存在问题,WinSock 效率低。
  • Unix 的epollkqueue更高效。
  • Windows 无等效高效 polling API,IOCP 虽好但不兼容。
  • 可通过与 AFD 交互解决问题,需访问 Windows 内部函数等。
  • 使用\Device\Afd存在风险,如在 Wine 上未实现等。

重要细节:

  • Future trait 的定义及工作原理。
  • poll系统调用在 Windows 和 Unix 上的差异及效率问题。
  • 与 AFD 交互的具体步骤,如访问内部函数、创建句柄、使用 I/O 控制等。
  • 提到miotokiowepollpollingsmolasync-stdlibuv等与\Device\Afd的关系。
阅读 12
0 条评论