mirror of
https://github.com/async-rs/async-std.git
synced 2025-04-08 01:16:41 +00:00
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
|
//! default-features = false
|
||||||
//! features = ["alloc"]
|
//! 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(not(feature = "std"), no_std)]
|
||||||
#![cfg_attr(feature = "docs", feature(doc_cfg))]
|
#![cfg_attr(feature = "docs", feature(doc_cfg))]
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
//! The runtime.
|
//! The runtime.
|
||||||
|
|
||||||
|
use std::env;
|
||||||
use std::thread;
|
use std::thread;
|
||||||
|
|
||||||
use once_cell::sync::Lazy;
|
use once_cell::sync::Lazy;
|
||||||
|
@ -12,10 +13,20 @@ pub struct Runtime {}
|
||||||
/// The global runtime.
|
/// The global runtime.
|
||||||
pub static RUNTIME: Lazy<Runtime> = Lazy::new(|| {
|
pub static RUNTIME: Lazy<Runtime> = Lazy::new(|| {
|
||||||
// Create an executor thread pool.
|
// 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()
|
thread::Builder::new()
|
||||||
.name("async-std/runtime".to_string())
|
.name(thread_name.clone())
|
||||||
.spawn(|| smol::run(future::pending::<()>()))
|
.spawn(|| smol::run(future::pending::<()>()))
|
||||||
.expect("cannot start a runtime thread");
|
.expect("cannot start a runtime thread");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue