tokio::sync
- Rust kursu
- İleri seviye
- Ders 9/81
- 4 dk
tokio::sync ile asenkron senkronizasyon araçlarını öğrenirsin.
tokio::sync
tokio::sync görevler arası eşzamanlama araçları sunar: Mutex, RwLock (kilidi beklerken thread'i bloke etmez), mpsc, broadcast, watch ve tek seferlik yanıt için oneshot:
let (tx, rx) = tokio::sync::oneshot::channel();
tokio::spawn(async move {
tx.send(6 * 7).unwrap();
});
println!("{}", rx.await.unwrap()); // 42oneshot, "bir göreve iş ver, sonucunu tek bir mesajla al" deseni için idealdir.
std karşılığı: tek mesajlık kanal
Standart kütüphanede ayrı bir oneshot yoktur, ama tek mesaj gönderilen bir mpsc kanalı aynı işi görür:
use std::sync::mpsc;
use std::thread;
let (tx, rx) = mpsc::channel();
thread::spawn(move || {
tx.send(6 * 7).unwrap();
});
println!("{}", rx.recv().unwrap());recv mesaj gelene kadar bekler; gönderici mesaj göndermeden bırakılırsa Err döner.
Uygulama Tek seferlik yanıt
mpsc::channel ile bir kanal aç. Ayrı bir thread 6 * 7 sonucunu göndersin; ana thread recv ile alıp yazdırsın.
Başlangıç kodu
use std::sync::mpsc;
use std::thread;
fn main() {
// buraya yaz
}Örnek çözüm
use std::sync::mpsc;
use std::thread;
fn main() {
let (tx, rx) = mpsc::channel();
thread::spawn(move || {
tx.send(6 * 7).unwrap();
});
println!("{}", rx.recv().unwrap());
}Beklenen çıktı
42
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Async kodda <code>std::sync::Mutex</code> ne zaman kabul edilebilir?
- Hiçbir zaman
- Her zaman
- Yalnızca tek thread'de
- Kilit kısa tutuluyorsa ve .await boyunca elde tutulmuyorsa Doğru cevap
Açıklama: Std mutex'i .await boyunca tutmak hem bloke edebilir hem de Future'ı Send olmaktan çıkarır; bu durumda tokio::sync::Mutex gerekir.
2 Mesaj bekle
let (tx, rx) = mpsc::channel();
thread::spawn(move || tx.send(42).unwrap());
let n = rx.____().unwrap();
let (tx, rx) = mpsc::channel();
thread::spawn(move || tx.send(42).unwrap());
let n = rx.recv().unwrap();
Açıklama: recv bir mesaj gelene kadar bekler.
3 Araç ve kullanım
| Kavram | Anlamı |
|---|---|
oneshot |
Tek yanıt |
mpsc |
Çok üretici, tek tüketici |
broadcast |
Herkese yayın |
watch |
Son değeri izle |