irfo
Moderatör
- Katılım
- 7 Ocak 2026
- Mesajlar
- 290
- Tepkime puanı
- 2
- Puanları
- 18
Rust'ta asenkron programlama, thread'leri (iş parçacıklarını) bloklamadan aynı anda binlerce görevi (task) yürütmenize olanak tanır. Özellikle ağ istekleri, dosya okuma veya veritabanı işlemleri gibi I/O bound (Giriş/Çıkış odaklı) işlerde sistem kaynaklarını çok daha verimli kullanmanızı sağlar.
Tokio'nun sundukları:
Rust
4. Görevleri Paralelleştirmek:
Rust
Rust
1. Async/Await Mantığı: Future'lar
Rust'ta bir fonksiyonuasync fn olarak tanımladığınızda, bu fonksiyon çağrıldığı an çalışmaz. Bunun yerine, gelecekte tamamlanacak bir işlemi temsil eden bir Future döndürür.async: Bir kod bloğunu veya fonksiyonu asenkron hale getirir..await: İşlem tamamlanana kadar mevcut görevi duraklatır ve kontrolü Executor'a (yürütücüye) geri verir. Bu sırada thread başka işler yapmaya devam edebilir.
2. Neden Tokio?
Rust standart kütüphanesi asenkron yapılar için gerekli olan temel trait'leri (Future gibi) sunar ancak bunları çalıştıracak bir Runtime (çalışma zamanı) sunmaz. Tokio, Rust ekosistemindeki en popüler, hızlı ve güvenilir asenkron runtime'dır.Tokio'nun sundukları:
- Çok iş parçacıklı bir zamanlayıcı (Scheduler).
- Asenkron dosya ve ağ (TCP/UDP) işlemleri.
- Zaman aşımı (Timeout) ve kanal (Channel) yapıları.
3. Temel Bir Tokio Uygulaması
Bir asenkron fonksiyonu çalıştırmak için bir giriş noktasına ihtiyacınız vardır. Tokio ile bu#[tokio::main] makrosu ile yapılır:Rust
Kod:
#[tokio::main]
async fn main() {
println!("İşlem başlıyor...");
// Asenkron bir fonksiyonu çağırıp sonucunu bekliyoruz
let sonuc = sayi_getir().await;
println!("Sonuç: {}", sonuc);
}
async fn sayi_getir() -> i32 {
// Yapay bir bekleme (thread'i bloklamaz!)
tokio::time::sleep(tokio::time::Duration::from_secs(1)).await;
42
}
4. Görevleri Paralelleştirmek: tokio::spawn
thread::spawn OS düzeyinde yeni bir thread açarken, tokio::spawn çok daha hafif olan bir Tokio Task (görev) oluşturur. Bir thread içinde binlerce task çalışabilir.Rust
Kod:
use tokio;
#[tokio::main]
async fn main() {
let handle = tokio::spawn(async {
// Arka planda çalışan bir görev
println!("Arka plan görevi çalışıyor");
});
// Ana akış devam eder...
handle.await.unwrap();
}
5. Select! Makrosu
Tokio'nun en güçlü araçlarından biriselect! makrosudur. Birden fazla asenkron işlemden hangisi önce biterse onun sonucunu almanızı sağlar.Rust
Kod:
tokio::select! {
val = islem_bir() => {
println!("İşlem 1 önce bitti: {}", val);
}
val = islem_iki() => {
println!("İşlem 2 önce bitti: {}", val);
}
}
Özet: Senkron vs Asenkron
| Özellik | Senkron (Threads) | Asenkron (Tokio) |
| Birim | OS Thread (Ağır) | Task / Green Thread (Hafif) |
| Bloklama | Thread beklerken boş durur. | .await ile thread başka işe geçer. |
| Kapasite | Yüzlerce thread. | Milyonlarca task. |
| Kullanım | CPU yoğun işlemler (Matematik). | I/O yoğun işlemler (Web/Veritabanı). |