1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//! The runtime.

use std::env;
use std::thread;

use once_cell::sync::Lazy;

use crate::future;

/// Dummy runtime struct.
pub struct Runtime {}

/// The global runtime.
pub static RUNTIME: Lazy<Runtime> = Lazy::new(|| {
    // Create an executor thread pool.

    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(thread_name.clone())
            .spawn(|| crate::task::block_on(future::pending::<()>()))
            .expect("cannot start a runtime thread");
    }
    Runtime {}
});