#thread-pool #actix #dynamic #blocking #env #idle #cpu

actix-dynamic-threadpool

为actix crate提供动态扩展的线程池

1个不稳定版本

0.1.0 2020年9月7日

#13#idle

每月 25 次下载

MIT 许可协议

22KB
468

为actix-xxx crate提供动态线程池。


使用方法

  • 添加到您的 Cargo.toml 并替换 actix-threadpool

lib.rs:

用于阻塞操作的动态线程池

根据工作负载懒惰地生成线程,最多可生成您机器的 逻辑 CPU 核心数 * 5 个线程。任何空闲30秒的已创建线程将被回收和终止。

.* 设置可以通过环境变量进行配置。

示例

use std::env::set_var;

#[actix_rt::main]
async fn main() {
    // Optional: Set the max thread count for the blocking pool.
    set_var("ACTIX_THREADPOOL", "30");
    // Optional: Set the min thread count for the blocking pool.
    set_var("ACTIX_THREADPOOL_MIN", "1");
    // Optional: Set the timeout duration IN SECONDS for the blocking pool's idle threads.
    set_var("ACTIX_THREADPOOL_TIMEOUT", "30");

    let future = actix_dynamic_threadpool::run(|| {
        /* Some blocking code with a Result<T, E> as return type */
        Ok::<usize, ()>(1usize)
    });

    /*
        We can await on this blocking code and NOT block our runtime.
        When we waiting our actix runtime can switch to other async tasks.
    */

    let result: Result<usize, actix_dynamic_threadpool::BlockingError<()>> = future.await;

    assert_eq!(1usize, result.unwrap())
}

依赖项

~1.8–2.4MB
~51K SLoC