I have found the suggestion in the tokio docs to avoid using tokio for CPU bound work very confusing. I think the core suggestion is not to use the same threadpool for IO and CPU bound work (which makes a lot of sense) but it is perfectly feasible to create multiple tokio threadpools (`Runtimes`) in the same process.
I have filed a PR[1] with tokio to try and clarify the docs in this matter. Andrew p.s. if you want an example of how to create multiple tokio threadpools, you there is a link to `DedicatedExecutor` on the ticket description. https://github.com/tokio-rs/tokio/pull/4105 On Mon, Sep 13, 2021 at 12:15 AM QP Hou <houqp....@gmail.com> wrote: > Hi Renjie, > > If by datafusion benchmarks, you are referring to the code in the > datafusion/benches folder, then those benchmarks are executed with > tokio runtime. > > You are correct that one should schedule compute bound tasks into a > separate task managed by a dedicated thread to avoid blocking the > async runtime main thread. This practice applies to not just tokio, > but any other async runtime in general. > > The tokio runtime used in the benchmark is initiated with > `tokio::runtime::Runtime::new()`. Tokeio in datafusion/Cargo.toml is > pulled in with the `rt-multi-thread` feature flag. So I believe by > default it creates the runtime with a multi-thread scheduler. I don't > think it matters that much for benchmarks though, because in those > benchmark code, we call `Runtime::block_on` when executing the async > query code. > > On Sat, Sep 11, 2021 at 7:38 PM Renjie Liu <liurenjie2...@gmail.com> > wrote: > > > > Hi, all: > > I see that the executor trait is marked as async/await in method > > definition. I have several questions: > > 1. What async/await runtime is used in benchmarking? > > 2. Tokio is the most popular async/await runtime, and they suggest to put > > long running tasks in separate thread pool rather than using tokio > runtime > > directly, and you can find this here < > https://docs.rs/tokio/1.11.0/tokio/> > > > > > If your code is CPU-bound and you wish to limit the number of threads > used > > > to run it, you should run it on another thread pool such as rayon > > > <https://docs.rs/rayon>. > > > > > So my second question is did you test against thread pool execution mode? > > > > It would be highly appreciated if you can answer my question. > > -- > > Renjie Liu > > Software Engineer, MVAD >