如果我使用std::launch::async策略启动std::async,它不应该在新线程中启动每个异步任务吗?目前看来,新的异步任务会移动到刚完成工作的线程上。我正在使用VC11编译器。从输出结果可以看出,当使用std::async启动一个新的worker(例如,一个worker多次获取ID为34500的线程)时,它会在先前完成的线程中启动。我的std::async理解是否有误,还是有一些类似于工作窃取队列的底层机制?
Worker (ID=24072) starting.
Worker (ID=34500) starting.
Worker (ID=32292) starting.
Worker (ID=31392) starting.
Worker (ID=17976) starting.
Worker (ID=31580) starting.
Worker (ID=33512) starting.
Worker (ID=33804) starting.
Worker 32292 finished.
Worker (ID=32292) starting.
Worker 17976 finished.
Worker (ID=17976) starting.
Worker 31580 finished.
Worker (ID=31580) starting.
Worker 34500 finished.
Worker (ID=34500) starting.
Worker 34500 finished.
Worker (ID=34500) starting.
Worker 32292 finished.
Worker (ID=32292) starting.
Worker 17976 finished.
Worker (ID=17976) starting.
Worker 34500 finished.
Worker 17976 finished.
Worker 31580 finished.
Worker 32292 finished.
Worker 33804 finished.
Worker 31392 finished.
Worker 33512 finished.
Worker 24072 finished.