Future
Dans ce trasail pratique, inspirés par la séance sur les
exécuteur-réacteur
(voir
08_runtimes_wakers_reactor_executor.md
) nous aimerions
implémenter une sorte de join_all()
au sens de la séance
sur les coroutines
(voir
07_stackless_coroutines.md
) afin d’avoir une exécution
potentiellement concurrente de nos Future
.
GET
sous la forme de
/{delay}/HelloWorld{i}
, avec delay
un délai en
milisecondes, et {i}
le numéro de la requête. On aurait
donc trois états: Start
, Wait
,
Resolved
spawn()
un nombre arbitraire de Future
de la
forme de la requête ci-dessus et qui aurait donc deux états
Start
et Resovled
. Cette partie serait le
Future
parent des requêtes GET
.block_on()
sur ce Future
parent et
observer le résultat.Effectuer la même chose, mais en mettant un exécuteur sur des
threaeds séparés. Votre main()
devra ressembler à quelque
chose du genre:
let mut executor = runtime::init();
let mut handles = vec![];
for i in 1..NTHREADS {
= format!("exec-{i}");
let name = Builder::new().name(name).spawn(move || {
let h // 1. Créer un nouvel exécuteur
// 2. Bloquer sur async_main()
}).unwrap();
// 3. ajouter h à handles
}
// 4. bloquer dans le thread principal sur async_main également
// 5. join tous les handles
Mesurez les gains de performance!
async_main()
spawn 5 Future
comme dans la partie 1.Builder
se trouve dans le dans
std::thread::Builder