14个版本
0.3.3 | 2022年3月27日 |
---|---|
0.3.2 | 2022年3月24日 |
0.2.1 | 2022年2月25日 |
0.1.7 | 2021年6月25日 |
0.1.4 | 2020年12月29日 |
#1151 在 异步
149 每月下载量
在 13 个开源软件包中(直接使用 9 个) 使用
91KB
999 行
safina-executor
异步执行器。
它是 safina
的一部分,一个安全异步运行时。
特性
- 在线程池上启动异步任务执行。
- 为阻塞任务在单独的线程池上安排闭包或
FnOnce
。 - 支持多个执行器。
禁止(不安全代码)
- 仅依赖于
std
- 良好的测试覆盖率(100%)
限制
- 分配内存
- 未优化
文档
https://docs.rs/safina-executor
示例
let executor = safina_executor::Executor::default();
let (sender, receiver) = std::sync::mpsc::channel();
executor.spawn(async move {
sender.send(()).unwrap();
});
receiver.recv().unwrap();
let result = safina_executor::block_on(async {
prepare_request().await?;
execute_request().await
})?;
let result = safina_executor::schedule_blocking(|| {
read_file1()?;
read_file2()
}).async_recv().await.unwrap()?;
替代方案
async-executor
- 流行
- 依赖项包含一些不安全代码
futures-executor
- 非常流行
- 包含大量不安全代码
tokio-executor
- 非常流行
- 快速
- 内部复杂
- 包含大量不安全代码
执行器
- 依赖项包含大量不安全代码
bastion-executor
- 包含大量不安全代码
rayon_core
- 包含大量不安全代码
pollster
- 最少
- 包含少量不安全代码
lelet
- 自动扩展工作线程池
- 包含大量不安全代码
fibers
- 依赖项包含大量不安全代码
nostd_async
- 包含一些不安全代码
embedded-executor
- 包含大量不安全代码
spin_on
- 最少
pasts
switchyard
- 包含大量不安全代码
sealrs
rusty_pool
- 自动调整线程池
- 依赖项包含大量不安全代码
更新日志
- v0.3.3 - 消除“在完成之后恢复”的虚假工作线程恐慌。
- v0.3.2 - 重导出
safina_sync::Receiver
和safina_threadpool::NewThreadPoolError
。 - v0.3.1 - 使用
safina-async
v0.2.1。 - v0.3.0 -
schedule_blocking
返回新的safina_sync::Receiver
。 - v0.2.1 - 更新文档。
- v0.2.0
Executor::new
和Executor::with_name
返回Result
。- 升级到
safina-threadpool
v0.2.0。
- v0.1.7 -
block_on
函数接受非Send
的 futures。 - v0.1.6 - 修复在任务第二次唤醒时在
block_on
和block_on_unpin
中出现的死锁。 - v0.1.5 - 支持 Rust 稳定版!需要 1.51+。
- v0.1.4 - 添加
schedule_blocking
和Executor::schedule_blocking
- v0.1.3
- 移除了全局 executor。用户必须显式创建 executor。
- 移除了对不稳定依赖
OnceCell
的依赖。 - 内部使用
safina_threadpool
。
- v0.1.2 - 允许调用者将 futures 传递给
spawn
和block_on
而不使用Box::pin
。为避免分配添加spawn_unpin
和block_on_unpin
。因此,调用者无需这样做。 - v0.1.1 - 修复徽章并更新 readme
- v0.1.0 - 从
safina
重命名
待办事项
- 添加压力测试
- 添加基准测试。见 https://crates.io/crates/executors 中的基准测试
- 添加
#[async_main]
宏 - 研究使用
flume
消除接收器互斥锁并减少竞争。
发布流程
- 编辑
Cargo.toml
并提升版本号。 - 运行
./release.sh
许可:Apache-2.0