1 个不稳定版本
0.1.0 | 2022 年 10 月 19 日 |
---|
#647 在 异步 中
20,579 每月下载量
用于 149 个 包(4 个直接使用)
34KB
705 行
Promise x Tokio = Prokio
兼容 WebAssembly 和非 WebAssembly 目标环境的异步运行时。
设计理念
当设计在由 JavaScript 运行时支持的 WebAssembly 目标和非 WebAssembly 目标(具有本地运行时)上运行的组件和库时,开发人员通常面临需要在整个应用程序中应用多个功能标志的挑战。
- 选择与目标运行时兼容的 I/O 和计时器。
- 本地运行时通常需要
Send
futures,而 WebAssembly 类型通常是!Send
。
实现
为了缓解这些问题,Prokio 实现了一个单线程运行时,可以执行 ?Send
(Send
或 !Send
) futures。
在支持多线程的平台中,prokio 会根据 CPU 核心数量创建多个独立运行时。当使用运行时句柄创建任务时,它将从内部池中随机选择一个工作线程。所有使用 spawn_local
创建的任务将在与任务运行相同的线程上运行。当运行时在 WebAssembly 目标上运行时,所有任务都将调度在主线程上。
此运行时旨在针对 IO 限制型工作负载,具有类似运行时成本。在运行 I/O 工作负载时,它会产生略微更好的性能,因为任务永远不会移动到其他线程。然而,如果工作线程繁忙,其他线程将无法窃取繁忙线程上排队的任务。当您有一个 CPU 限制型任务,其中 CPU 时间显著更昂贵时,应使用专用线程(或 Web Worker)创建该任务,并使用通道与应用程序通信。
Prokio 提供以下组件
- 一个能够运行非-Send 任务的调度器。
- 一个与调度器后端兼容的计时器。
- 任务同步机制。
运行时后端
Prokio 运行时根据目标平台实现了不同的运行时,可以使用所选本地运行时的所有功能(定时器/IO/任务同步)
wasm-bindgen-futures
(WebAssembly 目标)tokio
(非 WebAssembly 目标)
依赖项
~1.2–4.5MB
~82K SLoC