16个版本
0.2.2 | 2024年4月17日 |
---|---|
0.2.0 | 2024年2月23日 |
0.1.16 | 2023年10月13日 |
0.1.11 | 2023年7月21日 |
#97 in 异步
每月 351 次下载
在 20 crates 中使用
395KB
8K SLoC
基于Future(MVP),为外部提供基础的通用异步运行时和工具
主要特性
- 任务池:可定制的任务池
- 任务ID:外部使用任务ID可以方便地唤醒和挂起
- 抽象接口:可以自由实现自己的运行时
- 运行时推动:单线程运行时可以用自己的方式推动运行
示例
本地异步运行时
use pi_async::rt::{AsyncRuntime, AsyncRuntimeExt, serial_local_thread::{LocalTaskRunner, LocalTaskRuntime}};
let rt = LocalTaskRunner::<()>::new().into_local();
let _ = rt.block_on(async move {});
多线程异步运行时使用
use pi_async::prelude::{MultiTaskRuntime, MultiTaskRuntimeBuilder, StealableTaskPool};
use pi_async::rt::AsyncRuntimeExt;
let pool = StealableTaskPool::with(4,100000,[1, 254],3000);
let builer = MultiTaskRuntimeBuilder::new(pool)
.set_timer_interval(1)
.init_worker_size(4)
.set_worker_limit(4, 4);
let rt = builer.build();
let _ = rt.spawn(async move {});
基准测试
云服务平台
- 16核(vCPU) 2.5 GHz主频、3.2 GHz睿频的Intel ® Xeon ® Platinum 8269CY(Cascade Lake)
- 内存:64G
- CentOS 7.3 64位
项目 | pi_async | async_std | tokio | 备注 |
---|---|---|---|---|
bench_async_mutex | 3,266 ns/iter (+/- 136) | 149,332 ns/iter (+/- 7,212) | 6,374,238 ns/iter (+/- 861,432) | |
contention | 338,786 ns/iter (+/- 68,222) | 901,779 ns/iter (+/- 28,380) | 2,157,495 ns/iter (+/- 38,100) | |
create | 257 ns/iter (+/- 2) | 61 ns/iter (+/- 0) | 63 ns/iter (+/- 0) | |
no_contention | 215,515 ns/iter (+/- 1,121) | 225,034 ns/iter (+/- 740) | 550,285 ns/iter (+/- 2,313) | |
await_empty_many | 605,232 ns/iter (+/- 125,354) | 394,823 ns/iter (+/- 19,107) | 393,625 ns/iter (+/- 4,459) | |
chained_spawn | 504,570 ns/iter (+/- 24,166) | 1,090,176 ns/iter (+/- 27,817) | 251,943 ns/iter (+/- 1,412) | |
ping_pong | 1,176,361 ns/iter (+/- 197,786) | 3,859,845 ns/iter (+/- 73,410) | 1,193,711 ns/iter (+/- 20,376) | |
spawn_empty_many | 4,187,949 ns/iter (+/- 587,053) | 18,887,015 ns/iter (+/- 347,589) | 9,941,412 ns/iter (+/- 659,722) | |
spawn_many | 3,436,761 ns/iter (+/- 279,137) | 19,001,495 ns/iter (+/- 380,355) | 7,615,952 ns/iter (+/- 210,639) | |
spawn_one_to_one | 6,205,756 ns/iter (+/- 826,745) | 36,189,628 ns/iter (+/- 357,690) | 16,620,075 ns/iter (+/- 589,085) | |
yield_many | 23,757,528 ns/iter (+/- 4,110,213) | 52,304,694 ns/iter (+/- 519,928) | 17,746,497 纳秒/迭代 (+/- 550,878) | |
block_on | 83 纳秒/迭代 (+/- 0) | 2,593 纳秒/迭代 (+/- 48) | 178 纳秒/迭代 (+/- 1) | |
local_run | 666,627 纳秒/迭代 (+/- 5,476) | |||
local_send_many | 5,885,537 纳秒/迭代 (+/- 98,251) | |||
local_spawn_many | 1,260,102 纳秒/迭代 (+/- 5,423) | 20,201,034 纳秒/迭代 (+/- 692,642) | 1,553,246 纳秒/迭代 (+/- 49,815) |
贡献指南
许可证
本项目采用MIT许可证。
贡献
除非你明确表示否则,你提交给pi_async的任何有意贡献都将作为MIT许可证授权,不附加任何额外条款或条件。
依赖项
~6–36MB
~511K SLoC