3个版本
0.1.2 | 2022年11月30日 |
---|---|
0.1.1 | 2021年3月15日 |
0.1.0 | 2020年5月25日 |
#831 在 WebAssembly
25 每月下载量
用于 wasm-mt-pool-test
69KB
953 行
wasm-mt-pool
基于 wasm-mt
的线程池库 (github | crate).
示例
您可以在浏览器中运行以下所有应用程序!
- pool_exec - 如何使用
wasm_mt_pool
。 [ 在线 | 源代码 ] - http - 基于
wasm_mt_pool
的多线程服务器。 [ 在线 | 源代码 ] - pool_arraybuffers - 使用
ThreadPool::new_with_arraybuffers()
的演示。 [ 在线 | 源代码 ]
入门
要求
- rustc (nightly)
wasm-pack build
使用--target no-modules
选项
Cargo.toml
wasm-mt-pool = "0.1"
serde = { version = "1.0", features = ["derive"] }
serde_closure = "0.3"
用法
#![feature(async_closure)]
use wasm_mt_pool::prelude::*;
use wasm_mt::utils::{console_ln, sleep};
let size = 2;
let pkg_js = "./pkg/pool_exec.js"; // path to `wasm-bindgen`'s JS binding
let pool = ThreadPool::new(size, pkg_js).and_init().await.unwrap();
let num = 4;
console_ln!("a) 💦 pool_exec! {} closures:", num);
for _ in 0..num {
pool_exec!(pool, move || {
console_ln!("a) closure: done.");
Ok(JsValue::NULL)
});
}
console_ln!("b) 💦 pool_exec! {} async closures:", num);
for _ in 0..num {
pool_exec!(pool, async move || {
sleep(1000).await;
console_ln!("b) async closure: done.");
Ok(JsValue::NULL)
});
}
let cb = move |result| {
console_ln!("callback: result: {:?}", result);
};
console_ln!("c) 💦 pool_exec! {} closures with callback:", num);
for _ in 0..num {
pool_exec!(pool, move || {
console_ln!("c) closure: done.");
Ok(JsValue::from("C"))
}, cb);
}
console_ln!("d) 💦 pool_exec! {} async closures with callback:", num);
for _ in 0..num {
pool_exec!(pool, async move || {
sleep(1000).await;
console_ln!("d) async closure: done.");
Ok(JsValue::from("D"))
}, cb);
}
sleep(6_000).await; // Do sleep long enough to ensure all jobs are completed.
assert_eq!(pool.count_pending_jobs(), 0);
依赖
~8–12MB
~226K SLoC