Rugina concurenta cu alătura și tokio

0

Problema

Eu sunt încercarea de a rula două funcții în paralel cu join.

Codul meu este simplu:

tokio = { version = "1.14.0", features = ["full"] }
use tokio::join;
use std::thread::sleep;
use std::time::{Duration, Instant};

async fn fn_1() -> i8 {
  sleep(Duration::from_secs(2));

  2
}

async fn fn_2() -> i8 {
  sleep(Duration::from_secs(2));

  1
}

#[tokio::main]
async fn main() -> () {
  let now = Instant::now();

  println!("start: {:#?}", now.elapsed());

  let a = fn_1();
  let b = fn_2();

  join!(a, b);

  println!("end: {:#?}", now.elapsed());
}

Dar indiferent de ceea ce fac, acest lucru are 4s —2s + 2s—, în timp ce acesta ar trebui să ia 2s dacă nu mă înșel:

start: 37ns
end: 4.01036111s

E ceva ce-mi lipsește?

async-await asynchronous rust rust-tokio
2021-11-22 21:08:44
1

Cel mai bun răspuns

1

Sunteți de asteptare std somn funcțiile care a pus sistemul de OPERARE fir pentru a dormi că programul se execută pe. Dacă suni la tokio::time::sleep funcții în schimb, futures pe ar trebui să fie evaluate în același timp.

Pentru a activa efectiv paralelismului în execuție, va trebui să utilizați tokio::task::spawn pentru a lasa runtime decide care fir pentru a rula generat pe viitor.

Pentru a citi mai departe pe ceea ce blocarea este, am recomanda acest excelent post pe blog: https://ryhl.io/blog/async-what-is-blocking/

2021-11-22 21:16:29

Văd... Deci, odată ce vom ajunge în asincron cu Tokio, trebuie să se bazeze pe ea pentru toate asincron de muncă. Voi avea o privire la acest link, multumesc mult.
miravelardo

În alte limbi

Această pagină este în alte limbi

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................