Eşzamansız programlama, bir Rust geliştiricisi olarak bilmeniz gereken önemli bir kavramdır.
Geleneksel eşzamanlı programlama modelleri genellikle performans darboğazlarına yol açar. Bunun nedeni, programın bir sonraki göreve geçmeden önce yavaş işlemlerin tamamlanmasını beklemesidir. Bu genellikle yetersiz kaynak kullanımına ve yavaş bir kullanıcı deneyimine neden olur.
Eşzamansız programlama, sistem kaynaklarını etkin bir şekilde kullanan, engellemeyen kod yazmanıza olanak tanır. Eşzamansız programlamadan yararlanarak, birden çok görevi gerçekleştiren uygulamalar tasarlayabilirsiniz. Eşzamansız programlama, yürütme akışını engellemeden birkaç ağ isteğini işlemek veya büyük miktarda veriyi işlemek için kullanışlıdır.
Rust'ta Asenkron Programlama
Rust'ın eşzamansız programlama modeli, eşzamanlı olarak çalışan verimli Rust kodu yaz yürütme akışını engellemeden. Eşzamansız programlama, G/Ç işlemleri, ağ istekleri ve dış kaynakları beklemeyi içeren görevlerle uğraşırken faydalıdır.
Eşzamansız programlamayı Rust uygulamalarınızda çeşitli şekillerde uygulayabilirsiniz. Bunlara dil özellikleri, kitaplıklar ve Tokio çalışma zamanı dahildir.
Ayrıca, Rust'ın sahiplik modeli ve kanallar ve kilitler gibi eşzamanlılık ilkelleri, güvenli ve verimli eşzamanlı programlama sağlar. İyi ölçeklenen ve birden fazla CPU çekirdeği kullanan eşzamanlı sistemler oluşturmak için bu özelliklerden eşzamansız programlama ile yararlanabilirsiniz.
Rust'ın Asenkron Programlama Kavramları
Vadeli işlemler, Rust'ta eşzamansız programlama için bir temel sağlar. Gelecek, tamamen yürütülmemiş eşzamansız bir hesaplamayı temsil eder.
Vadeli işlemler tembeldir (yalnızca oylama sırasında yürütülürler). Bir gelecek çağırdığında anket() yöntemiyle, geleceğin tamamlanıp tamamlanmadığını veya ek çalışmaya ihtiyaç duyup duymadığını kontrol eder. Gelecek hazır değilse geri döner Anket:: Beklemede, görevin daha sonra yürütülmek üzere programlanması gerektiğini belirtir. Gelecek hazırsa geri döner Anket:: Hazır sonuç değeri ile.
Rust'ın standart araç zinciri, eşzamansız G/Ç ilkellerini, dosya G/Ç'nin eşzamansız bir sürümünü, ağ iletişimi ve zamanlayıcıları içerir. Bu ilkel öğeler, G/Ç işlemlerini eşzamansız olarak gerçekleştirmenize izin verir. Bu, G/Ç görevlerinin tamamlanmasını beklerken bir programın yürütülmesinin engellenmesini önlemeye yardımcı olur.
Eşzamansız/bekliyor sözdizimi, eşzamanlı koda benzeyen eşzamansız kod yazmanıza olanak tanır. Bu, kodunuzu sezgisel ve bakımı kolay hale getirir.
Rust'ın eşzamansız programlamaya yaklaşımı güvenlik ve performansı vurgular. Sahiplik ve ödünç alma kuralları, bellek güvenliğini sağlar ve ortak eşzamanlılık sorunlarını önler. Zaman uyumsuz/bekliyor sözdizimi ve gelecekler, zaman uyumsuz iş akışlarını ifade etmenin sezgisel bir yolunu sağlar. Verimli yürütme için görevleri yönetmek üzere bir üçüncü taraf çalışma zamanı kullanabilirsiniz.
Yüksek performanslı kod yazmak için bu dil özelliklerini, kitaplıkları ve çalışma zamanını birleştirebilirsiniz. Eşzamansız sistemler oluşturmak için güçlü ve ergonomik bir çerçeve sağlar. Bu, Rust'ı G/Ç'ye bağlı görevlerin verimli bir şekilde ele alınmasını ve yüksek eşzamanlılığı gerektiren projeler için popüler bir seçim haline getirir.
Rust sürüm 1.39 ve sonraki sürümler, Rust'ın standart kitaplığında eşzamansız işlemleri desteklemez. Kullanmak için bir üçüncü taraf kasasına ihtiyacınız olacak. zaman uyumsuz/beklemek Rust'ta eşzamansız işlemleri işlemek için sözdizimi. Gibi üçüncü taraf paketleri kullanabilirsiniz. Tokyo veya async-std async/await sözdizimi ile çalışmak için.
Tokyo ile Asenkron Programlama
Tokio, Rust için sağlam bir eşzamansız çalışma zamanıdır. Yüksek performanslı ve ölçeklenebilir uygulamalar oluşturmak için işlevsellik sağlar. Tokio ile eşzamansız programlamanın gücünden yararlanabilirsiniz. Ayrıca genişletilebilirlik için özellikler sağlar.
Tokio'nun özünde, eşzamansız görev planlama ve yürütme modeli bulunur. Tokio, zaman uyumsuz/bekliyor sözdizimiyle eşzamansız kod yazmanıza izin verir. Bu, verimli sistem kaynağı kullanımını ve eşzamanlı görev yürütmeyi mümkün kılar. Tokio'nun olay döngüsü, görev zamanlamasını verimli bir şekilde yönetir. Bu, CPU çekirdeklerinin optimum kullanımını sağlar ve bağlam değiştirme ek yükünü en aza indirir.
Tokio'nun birleştiricileri, Görev koordinasyonunu ve kompozisyonunu kolaylaştırır. Tokio, güçlü görev koordinasyonu ve kompozisyon araçları sağlar. Join ile birden fazla görevin tamamlanmasını bekleyebilir, select ile tamamlanan ilk görevi seçebilir ve yarış ile görevleri birbirinize karşı yarıştırabilirsiniz.
Ekle tokio sandık senin Kargo.toml dosyanın bağımlılıklar bölümü.
[dependencies]
tokio = { version = "1.9", features = ["full"] }
Async/await sözdizimini Tokio ile Rust programlarınızda şu şekilde kullanabilirsiniz:
use tokio:: time:: sleep;
use std:: time:: Duration;asyncfnhello_world() {
println!("Hello, ");
sleep(Duration:: from_secs(1)).await;
println!("World!");
}
#[tokio:: main]
asyncfnmain() {
hello_world().await;
}
bu Selam Dünya işlev eşzamansızdır, bu nedenle beklemek bir gelecek çözümlenene kadar yürütülmesini duraklatmak için anahtar kelime. bu Selam Dünya fonksiyon baskıları "Merhaba, " konsola. bu Süre:: from_secs (1) işlev çağrısı, işlevin yürütülmesini bir saniyeliğine askıya alır. bu beklemek anahtar kelime uyku geleceğinin tamamlanmasını bekler. Son olarak, Selam Dünya fonksiyon baskıları "Dünya!" konsola.
bu ana fonksiyonu ile asenkron bir fonksiyondur. #[tokio:: ana] bağlanmak. Ana işlevi Tokio çalışma zamanı için giriş noktası olarak belirler. bu merhaba_dünya().bekliyor hello_world işlevini eşzamansız olarak yürütür.
Tokio ile Görevleri Geciktirme
Eşzamansız programlamada yaygın bir görev, belirli bir zaman aralığında çalıştırmak için gecikmeler veya zamanlama görevleri kullanmaktır. tokio çalışma zamanı, zaman uyumsuz zamanlayıcıları ve gecikmeleri kullanmak için bir mekanizma sağlar. tokio:: zaman modül.
Tokio runtime ile bir işlemi şu şekilde geciktirebilirsiniz:
use std:: time:: Duration;
use tokio:: time:: sleep;asyncfndelayed_operation() {
println!("Performing delayed operation...");
sleep(Duration:: from_secs(2)).await;
println!("Delayed operation completed.");
}
#[tokio:: main]
asyncfnmain() {
println!("Starting...");
delayed_operation().await;
println!("Finished.");
}
bu gecikmeli_işlem fonksiyonu iki saniyelik bir gecikme sağlar. uyumak yöntem. bu gecikmeli_işlem işlev eşzamansızdır, dolayısıyla bekleme tamamlanana kadar yürütmesini duraklatmak için wait'i kullanabilir.
Asenkron Programlarda Hata İşleme
Eşzamansız Rust kodunda hata işleme, Sonuç yazın ve Rust hatalarını işleme ile ? Şebeke.
use tokio:: fs:: File;
use tokio:: io;
use tokio:: io::{AsyncReadExt};asyncfnread_file_contents() -> io::Result<String> {
letmut file = File:: open("file.txt").await?;
letmut contents = String::new();
file.read_to_string(&mut contents).await?;
Ok(contents)
}asyncfnprocess_file() -> io::Result {
let contents = read_file_contents().await?;
// Process the file contents
Ok(())
}
#[tokio:: main]
asyncfnmain() {
match process_file().await {
Ok(()) => println!("File processed successfully."),
Err(err) => eprintln!("Error processing file: {}", err),
}
}
bu read_file_contents işlev bir döndürür io:: Sonuç bu bir G/Ç hatası olasılığını temsil eder. kullanarak ? operatörü, her eşzamansız işlemden sonra, Tokio çalışma zamanı hataları çağrı yığınına yayar.
bu ana işlev, sonucu bir kibrit işlemin sonucuna göre bir metin yazdıran deyim.
Reqwest, HTTP İşlemleri için Eşzamansız Programlama Kullanıyor
Reqwest dahil birçok popüler kasa, eşzamansız HTTP işlemleri sağlamak için Tokio'yu kullanır.
Diğer görevleri engellemeden birkaç HTTP isteği yapmak için Tokio'yu Reqwest ile birlikte kullanabilirsiniz. Tokio, binlerce eşzamanlı bağlantıyı yönetmenize ve kaynakları verimli bir şekilde yönetmenize yardımcı olabilir.