如何将 Tokio 线程池限制为一定数量的本机线程?

Posted

技术标签:

【中文标题】如何将 Tokio 线程池限制为一定数量的本机线程?【英文标题】:How do I limit the Tokio threadpool to a certain number of native threads? 【发布时间】:2018-10-16 16:04:06 【问题描述】:

将 Tokio (v 0.1.11) 线程池限制为 n OS 本机线程的正确方法是什么,其中 n 是任意数字,最好在运行时配置?

据我所知,可以在单线程模式下使用 Tokio,使用 tokio_current_thread::block_on_all 而不是 tokio::runtokio_current_thread::spawn 而不是 tokio::spawn

我想要一个类似的解决方案,但针对 n >= 1

【问题讨论】:

【参考方案1】:

您可以使用 tokio::runtime::Builder 构建 Tokio Runtime 对象。 builder 提供了一个core_threads() 方法,可用于配置线程数,例如

let mut rt = runtime::Builder::new()
    .core_threads(4)
    .build()
    .unwrap();

然后您可以使用rt.spawn(some_future) 在此运行时上运行未来。

【讨论】:

请问,如果你知道的话,如果这个运行时构建已经是一个东西,为什么tokio_current_thread crate 存在?它是否为单线程场景提供了优势? 如果你使用当前线程执行器,我认为你对未来的限制更少,因为它们不需要是Send。使用线程执行器,即使您只使用单个线程,所有期货都需要为Send。 (我可能混淆了术语,但它是这样的。)

以上是关于如何将 Tokio 线程池限制为一定数量的本机线程?的主要内容,如果未能解决你的问题,请参考以下文章

在决定线程池大小时,如何理解“将每个任务需要的资源加起来并将其划分为可用的总数”

js实现"线程池"限制异步任务数量

如何在 asp.net Core 中增加最大线程池限制

JAVA线程池使用哪一种比较好

在应用程序生命周期内创建的最大线程池数量是不是有限制?

Java常用的几种线程池