下面的代码有什么问题?如果struct的第一个memebers == 0,它应该在结构列表中找到一个元素.编译器抱怨lambda参数不是Predicate类型.
#include <iostream>
#include <stdint.h>
#include <fstream>
#include <list>
#include <algorithm>
struct S
{
int S1;
int S2;
};
using namespace std;
int main()
{
list<S> l;
S s1;
s1.S1 = 0;
s1.S2 = 0;
S s2;
s2.S1 = 1;
s2.S2 = 1;
l.push_back(s2);
l.push_back(s1);
list<S>::iterator it = find_if(l.begin(), l.end(), [] (S s) { return s.S1 == 0; } );
}
Run Code Online (Sandbox Code Playgroud) 我想了解 Rust 中 tokio 的 async/await 线程模型。我特别想知道 async/await 何时会导致代码在不同线程上执行。
我观察到,在带async fn main注释的#[tokio::main](创建多线程运行时)中运行 async/await/join 代码会在同一线程中执行所有代码。在我开始通过 执行代码之前,我没有看到其他线程被使用tokio::spawn。
一些相关文档。
任务是调度程序管理的执行单元。生成任务会将其提交给 Tokio 调度程序,然后调度程序确保该任务在有工作要做时执行。生成的任务可以在生成它的同一线程上执行,也可以在不同的运行时线程上执行。任务生成后还可以在线程之间移动。(强调我的)
这表示生成的单个 tokio 任务可以在执行期间在线程之间移动。什么时候会发生这种情况?
还有block_on运行#[tokio::main]函数体的文档
这会在当前线程上运行给定的 future,阻塞直到完成,并产生其解析结果。future 内部产生的任何任务或计时器都将在运行时执行。
这可以理解为除非产生新的任务或计时器,否则给定未来的代码将全部在同一线程上运行。这是我观察到的。
异步 rust 代码是否会在.await连接调用中同时(但不是并行)进行 future,并且仅在tokio::spawn使用时安排在不同的线程上?
文档似乎另有说明,如果是这样,如何决定将执行转移到新线程?