forked from mirror/async-std
feat: add env vars to configure the runtime threadpool size and name
This commit is contained in:
parent
2b6c7fedff
commit
9e6a76af04
2 changed files with 29 additions and 3 deletions
15
src/lib.rs
15
src/lib.rs
|
@ -230,6 +230,21 @@
|
|||
//! default-features = false
|
||||
//! features = ["alloc"]
|
||||
//! ```
|
||||
//!
|
||||
//! # Runtime configuration
|
||||
//!
|
||||
//! Several environment variables are available to tune the async-std
|
||||
//! runtime:
|
||||
//!
|
||||
//! * `ASYNC_STD_THREAD_COUNT`: The number of threads that the
|
||||
//! async-std runtime will start. By default, this is one per logical
|
||||
//! cpu as reported by the [num_cpus](num_cpus) crate, which may be
|
||||
//! different than the number of physical cpus. Async-std _will panic_
|
||||
//! if this is set to any value other than a positive integer.
|
||||
//! * `ASYNC_STD_THREAD_NAME`: The name that async-std's runtime
|
||||
//! threads report to the operating system. The default value is
|
||||
//! `"async-std/runtime"`.
|
||||
//!
|
||||
|
||||
#![cfg_attr(not(feature = "std"), no_std)]
|
||||
#![cfg_attr(feature = "docs", feature(doc_cfg))]
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
//! The runtime.
|
||||
|
||||
use std::env;
|
||||
use std::thread;
|
||||
|
||||
use once_cell::sync::Lazy;
|
||||
|
@ -12,10 +13,20 @@ pub struct Runtime {}
|
|||
/// The global runtime.
|
||||
pub static RUNTIME: Lazy<Runtime> = Lazy::new(|| {
|
||||
// Create an executor thread pool.
|
||||
let num_threads = num_cpus::get().max(1);
|
||||
for _ in 0..num_threads {
|
||||
|
||||
let thread_count = env::var("ASYNC_STD_THREAD_COUNT")
|
||||
.map(|env| {
|
||||
env.parse()
|
||||
.expect("ASYNC_STD_THREAD_COUNT must be a number")
|
||||
})
|
||||
.unwrap_or_else(|_| num_cpus::get())
|
||||
.max(1);
|
||||
|
||||
let thread_name = env::var("ASYNC_STD_THREAD_NAME").unwrap_or("async-std/runtime".to_string());
|
||||
|
||||
for _ in 0..thread_count {
|
||||
thread::Builder::new()
|
||||
.name("async-std/runtime".to_string())
|
||||
.name(thread_name.clone())
|
||||
.spawn(|| smol::run(future::pending::<()>()))
|
||||
.expect("cannot start a runtime thread");
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue