gpt4 book ai didi

rust - 多个非返回函数调用中只有一部分与async/await同时运行

转载 作者:行者123 更新时间:2023-12-03 11:45:35 26 4
gpt4 key购买 nike

我有一个测试用例,试图同时运行异步方法。我的代码尝试启动。其中有50个,但是当我运行它时,只有大约12个在async方法的开头打印该语句。

我需要怎么做才能使它们同时运行?

use futures::executor;
use futures::future;
use async_std;

async fn _spin(i: u32) {
println!("starting {}", i);
loop {
//do work
}
}

fn main() {
let mut futures = vec![];
for i in 0..50 {
futures.push(_spin(i));
}
let handles = futures.into_iter().map(async_std::task::spawn).collect::<Vec<_>>();
let joined = future::join_all(handles);
let _results = executor::block_on(joined);
}

输出。请注意,运行的对象似乎是随机选择的。
starting 0
starting 7
starting 12
starting 2
starting 11
starting 16
starting 10
starting 17
starting 1
starting 15
starting 3
starting 13

最佳答案

如果您调用“阻止”功能,即。一个无需调用await即可完成大量工作的函数,那么您应该使用 spawn_blocking 而不是spawn来使该函数获得专用线程。否则,将根据执行程序生成任务。在async-std中,默认执行程序是一个线程池,该线程池最多具有与逻辑核心一样多的线程。但是,您可以在其他执行程序上生成任务,包括具有不同线程数的线程池:

futures::executor::ThreadPool;
let pool = ThreadPool::builder()
.pool_size (2)
.create()
.unwrap();
pool.spawn_ok (async { /* do work */ });
/* Wait for tasks to complete */

关于rust - 多个非返回函数调用中只有一部分与async/await同时运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61726508/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com