3个版本 (稳定)
1.1.0 | 2023年3月23日 |
---|---|
1.0.0 | 2022年2月10日 |
1.0.0-alpha.0 | 2022年1月24日 |
#1065 在 WebAssembly 中
每月192次下载
21KB
461 行
waPC Pool
此crate实现了一个waPC主机的多线程池。您通常会使用HostPoolBuilder
来创建一个HostPool
,并使用.call()
来启动请求,就像在标准的WapcHost
上一样。
HostPool
内置了基本弹性。指定开始时要启动的最少线程数和增长到的最大线程数。在启动新工作者之前给池子一个max_wait
持续时间,并设置一个max_idle
持续时间来自动杀死高于最小大小的工作者。
use std::fs::read;
use wapc::WapcHost;
use wapc_codec::messagepack::{deserialize, serialize};
use wapc_pool::HostPoolBuilder;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let file = read("../../wasm/crates/wapc-guest-test/build/wapc_guest_test.wasm")?;
let engine = wasmtime_provider::WasmtimeEngineProvider::new(&file, None)?;
let pool = HostPoolBuilder::new()
.name("pool example")
.factory(move || {
let engine = engine.clone();
WapcHost::new(Box::new(engine), None).unwrap()
})
.max_threads(5)
.build();
let bytes = pool.call("echo", serialize("Hello!")?).await?;
let result: String = deserialize(&bytes)?;
println!("Wasm module returned: {}", result);
Ok(())
}
依赖关系
~4–11MB
~99K SLoC