如何将 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::run
和 tokio_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 线程池限制为一定数量的本机线程?的主要内容,如果未能解决你的问题,请参考以下文章