สนิม concurrency กับร่วมกั tokio

0

คำถาม

ฉันกำลังพยายามที่จะหนีสองคนฟังก์ชันอยู่ควบคู่กับ join.

ของรหัสคือธรรมดา:

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

แต่ไม่ว่าสิ่งที่ฉันทำอย่างนี้ต้องใช้ 4s—2s + 2s—ในขณะที่มันควรจะเอา 2s ถ้าผมไม่ผิดพลาด:

start: 37ns
end: 4.01036111s

มีบางอย่างฉันหายไปงั้นเหรอ?

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

คำตอบที่ดีที่สุด

1

คุณกำลังโทรหาคนเชื้อโรคที่ติดต่ดทางเพศเป็นอนฟังก์ชันซึ่งวาง O เธรดที่นอนของคุณโปรแกรมกำลังทำงานอยู่นะ ถ้าคุณโทรหา tokio::time::sleep ฟังก์ชันแทนที่จะเป็นที่อนาคตควรจะประเมินผลดดยใคร concurrently.

แบบอักษรที่จะเปิดใช้งานจริงๆ parallelism ในการประมวลผลคุณจะต้องใช้ tokio::task::spawn จะปล่อยให้ runtime ตัดสินใจซึ่งเธรดที่เกิดและสร้างอนาคตนะ

สำหรับการอ่านสิ่งที่จอดปิดทางก็คือฉันแนะนำอันนี้ดีเยี่ยมในบล็อกขอโพสต์: https://ryhl.io/blog/async-what-is-blocking/

2021-11-22 21:16:29

ฉันเห็น...ดังนั้นเมื่อเราได้เข้าไปใน async กับ Tokio เราต้องอาศัยมันสำหรับทุก async ทำงาน ฉันจะต้องดูที่ส่วนเชื่อมโยงนี้,ขอบคุณมาก
miravelardo

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

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

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่