Join ve tokio ile Rust eşzamanlılığı

0

Soru

Paralel olarak iki işlevi çalıştırmaya çalışıyorum join.

Benim kod basittir :

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());
}

Ama ne yaparsam yapayım, bu 4 saniye sürüyor. —2s + 2s- yanılmıyorsam 2 saniye sürer.:

start: 37ns
end: 4.01036111s

Kaçırdığım bir şey mi var?

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

En iyi cevabı

1

Programınızın çalıştığı işletim sistemi iş parçacığını uyku moduna geçiren std'nin uyku işlevlerini çağırıyorsunuz. Eğer ararsan tokio::time::sleep bunun yerine, vadeli işlemler aynı anda değerlendirilmelidir.

Yürütmede gerçek paralelliği etkinleştirmek için şunları kullanmanız gerekir tokio::task::spawn kökenli geleceğin iş parçacığının hangi çalışma kararı siz verin.

Engellemenin ne olduğu hakkında daha fazla bilgi için bu mükemmel blog gönderisini öneririm: https://ryhl.io/blog/async-what-is-blocking/

2021-11-22 21:16:29

Anlıyorum ... Yani Tokio ile eşzamansızlığa girdiğimizde, tüm eşzamansız işler için ona güvenmek zorundayız. Bu bağlantıya bir göz atacağım, çok teşekkürler.
miravelardo

Diğer dillerde

Bu sayfa diğer dillerde

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