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 异步
1,041 每月下载量
用于 15 个crate(直接使用8个)
35KB
628 行
popol
Rust的最小化非阻塞I/O。
请参阅 examples/
文件夹以了解用法。
概述
Rust中的异步I/O仍然是一个未解决的问题。随着 async/await 的稳定,我们看到了许多库和运行时出现,例如 async-std 和 smol,而其他如 tokio 和 mio 正在成熟。异步/await的问题在于你不能使用标准库中的任何特质,如 Read
和 Write
。异步生态系统带来了一整套完全独立的特质(例如 AsyncRead
和 AsyncWrite
)和I/O库。此外,这些运行时中的大多数都有很大的依赖性,部分原因是需要为标准库函数提供异步替代方案,部分原因是这些运行时的复杂性。
我们需要什么?对于大多数用例,处理从一打到几百个打开的连接而不阻塞的能力就足够了。这使我们完全处于 poll()
函数的领域,该函数几乎在所有平台上都可用。
Popol被设计为围绕 poll()
的最小化、易用的包装器,专为对等网络构建。
通过在 poll
上构建,我们具有以下优势
- 比最小的异步/await运行时实现还要小得多
- 所有的Rust标准库都可以正常工作(例如
io::Read
、io::Write
等) - 几乎零依赖(唯一的依赖是 libc crate)
- 没有“运行时”。使代码更容易推理
为什么不使用 epoll
?有几个原因
- 它比
poll
更复杂,需要我们编写更多的代码 - 它不可移植(仅在Linux上工作)
poll
足以处理大多数工作负载
与mio相比,popol是
- 小得多(大约为大小的10%)
- 更灵活且易于使用
- 支持标准库套接字
- 目前专注于基于Unix的系统兼容性
popol的API相较于mio的一些优点
- popol支持每个等待调用多个唤醒者。
- popol事件源标识不限于
u64
。 - popol的API主要由不可失败的功能组成。
另一方面,mio更加成熟,可能更适合处理大量连接。目前mio也支持更多平台。
许可证
本软件根据MIT许可证授权。有关详细信息,请参阅LICENSE
文件。
关于
版权所有 © Alexis Sellier https://cloudhead.io
依赖项
~43KB