10个版本 (3个重大变更)

3.0.0 2023年5月16日
2.2.0 2023年4月11日
2.1.0 2023年1月21日
2.0.0 2022年11月5日
0.3.0 2020年7月16日

#237 in 异步

Download history 255/week @ 2024-03-13 262/week @ 2024-03-20 150/week @ 2024-03-27 224/week @ 2024-04-03 121/week @ 2024-04-10 156/week @ 2024-04-17 110/week @ 2024-04-24 430/week @ 2024-05-01 157/week @ 2024-05-08 268/week @ 2024-05-15 193/week @ 2024-05-22 250/week @ 2024-05-29 234/week @ 2024-06-05 248/week @ 2024-06-12 280/week @ 2024-06-19 196/week @ 2024-06-26

1,041 每月下载量
用于 15 个crate(直接使用8个)

MIT 协议

35KB
628

popol

Rust的最小化非阻塞I/O。

请参阅 examples/ 文件夹以了解用法。

概述

Rust中的异步I/O仍然是一个未解决的问题。随着 async/await 的稳定,我们看到了许多库和运行时出现,例如 async-stdsmol,而其他如 tokiomio 正在成熟。异步/await的问题在于你不能使用标准库中的任何特质,如 ReadWrite。异步生态系统带来了一整套完全独立的特质(例如 AsyncReadAsyncWrite)和I/O库。此外,这些运行时中的大多数都有很大的依赖性,部分原因是需要为标准库函数提供异步替代方案,部分原因是这些运行时的复杂性。

我们需要什么?对于大多数用例,处理从一打到几百个打开的连接而不阻塞的能力就足够了。这使我们完全处于 poll() 函数的领域,该函数几乎在所有平台上都可用。

Popol被设计为围绕 poll() 的最小化、易用的包装器,专为对等网络构建。

通过在 poll 上构建,我们具有以下优势

  • 比最小的异步/await运行时实现还要小得多
  • 所有的Rust标准库都可以正常工作(例如 io::Readio::Write 等)
  • 几乎零依赖(唯一的依赖是 libc crate)
  • 没有“运行时”。使代码更容易推理

为什么不使用 epoll?有几个原因

  1. 它比 poll 更复杂,需要我们编写更多的代码
  2. 它不可移植(仅在Linux上工作)
  3. poll足以处理大多数工作负载

mio相比,popol

  • 小得多(大约为大小的10%)
  • 更灵活且易于使用
  • 支持标准库套接字
  • 目前专注于基于Unix的系统兼容性

popol的API相较于mio的一些优点

  • popol支持每个等待调用多个唤醒者
  • popol事件源标识不限于u64
  • popol的API主要由不可失败的功能组成。

另一方面,mio更加成熟,可能更适合处理大量连接。目前mio也支持更多平台。

许可证

本软件根据MIT许可证授权。有关详细信息,请参阅LICENSE文件。

关于

版权所有 © Alexis Sellier https://cloudhead.io

依赖项

~43KB