1 //! A global executor built on top of async-executor and async_io
2 //!
3 //! The global executor is lazily spawned on first use. It spawns as many threads
4 //! as the number of cpus by default. You can override this using the
5 //! `ASYNC_GLOBAL_EXECUTOR_THREADS` environment variable.
6 //!
7 //! # Examples
8 //!
9 //! ```
10 //! # use futures_lite::future;
11 //!
12 //! // spawn a task on the multi-threaded executor
13 //! let task1 = async_global_executor::spawn(async {
14 //!     1 + 2
15 //! });
16 //! // spawn a task on the local executor (same thread)
17 //! let task2 = async_global_executor::spawn_local(async {
18 //!     3 + 4
19 //! });
20 //! let task = future::zip(task1, task2);
21 //!
22 //! // run the executor
23 //! async_global_executor::block_on(async {
24 //!     assert_eq!(task.await, (3, 7));
25 //! });
26 //! ```
27 
28 #![forbid(unsafe_code)]
29 #![warn(missing_docs, missing_debug_implementations, rust_2018_idioms)]
30 
31 #[cfg(doctest)]
32 doc_comment::doctest!("../README.md");
33 
34 pub use async_executor::Task;
35 pub use config::GlobalExecutorConfig;
36 pub use executor::{block_on, spawn, spawn_blocking, spawn_local};
37 pub use init::{init, init_with_config};
38 pub use threading::{spawn_more_threads, stop_current_thread, stop_thread};
39 
40 mod config;
41 mod executor;
42 mod init;
43 mod reactor;
44 mod threading;
45 
46 #[cfg(feature = "tokio")]
47 mod tokio;
48 #[cfg(feature = "tokio02")]
49 mod tokio02;
50 #[cfg(feature = "tokio03")]
51 mod tokio03;
52