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- 最少
pastsswitchyard- 包含大量不安全代码
sealrsrusty_pool- 自动调整线程池
- 依赖项包含大量不安全代码
更新日志
- v0.3.3 - 消除“在完成之后恢复”的虚假工作线程恐慌。
- v0.3.2 - 重导出
safina_sync::Receiver和safina_threadpool::NewThreadPoolError。 - v0.3.1 - 使用
safina-asyncv0.2.1。 - v0.3.0 -
schedule_blocking返回新的safina_sync::Receiver。 - v0.2.1 - 更新文档。
- v0.2.0
Executor::new和Executor::with_name返回Result。- 升级到
safina-threadpoolv0.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