主要观点:
- iroh 是用于 p2p 网络和数据传输的 Rust 包集合,可通过多种方式访问和使用。
- 需支持所有主要平台,包括移动设备。
- 对于 iroh-net 等项目,async 是必要的,选择 Tokio 作为最流行和维护良好的 async 运行时。
- 处理阻塞代码时,可通过多种方式,如使用 IO 工作线程、单线程运行时等。
- Tokio 使用较复杂,需小心避免 panic,如在不同上下文中调用 Tokio 方法。
- Drop 操作在与 Tokio 交互时存在问题,需使用特定队列处理。
- Tokio 易导致 detached tasks 和 swallowed panics,应避免使用
tokio::spawn
而不处理结果。 tokio_util
的本地池实现存在 major issue,需使用自定义实现。futures
crate 的一些复杂组合器存在 bug,已决定停止使用并替换。- tracing 库在某些情况下会出现 panic 问题。
- 选择 mpmc 通道时,flume 存在 cancel safety 问题,async-channel 是目前的替代选择。
关键信息:
- iroh 可通过iroh 二进制、FFI bindings、iroh crate或导入模块使用。
- 支持多种平台,如 Raspberry Pis、Android、iOS 移动电话、云服务器等。
- async 在 iroh-net 中用于 quinn 实现的 QUIC,
iroh-blobs
也需处理频繁并发交互。 - Tokio 是默认运行时,其他运行时如 async-std 多年未更新,smol 不活跃,glommio 限于 Linux。
- 处理阻塞代码可用 IO 工作线程、单线程运行时,文件 IO 时用单独线程池处理。
- Tokio 使用需小心,不同函数在不同状态下调用可能 panic,本地任务更复杂。
- Drop 操作在与 Tokio 交互时需特殊处理,可用特定队列。
- Tokio 易导致 detached tasks 和 swallowed panics,应妥善处理。
tokio_util
本地池实现有问题,需自定义实现。futures
crate 组合器有 bug,已停止使用并替换。- tracing 库在某些情况下会出现 panic 问题。
- 选择 mpmc 通道时,flume 存在问题,async-channel 是替代选择。
重要细节:
- Redb 是同步嵌入式数据库,使用时需注意。
- 在 Tokio 中,不同函数的调用安全性与线程本地状态等有关。
- 处理 Drop 时可用多种队列,如 flume、async-channel 等。
- Tokio 的本地任务处理需小心,避免出现问题。
futures-lite
、futures-buffered
和futures-util
用于替换futures
crate。- iroh 是可定制的网络库,已在生产中使用,可通过文档、代码或 discord 频道了解。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。