- Rust topluluğunda sıkça şu soru görülüyor: thread'ler
async/await'in yapabildiği her şeyi yapabiliyor ve daha basitken neden async/await seçiliyor?
- Rust düşük seviyeli bir dil ve Coroutine karmaşıklığını gizlemiyor. Bu, programcının asenkronluğu düşünmesine gerek kalmadan varsayılan olarak asenkron çalışan Go gibi dillerin yaklaşımının tersine bir anlayış.
- Akıllı programcılar karmaşıklıktan kaçınmaya çalışır; peki neden
async/await gerekli?
Arka planı anlamak
- Rust düşük seviyeli bir dildir. Kod genellikle doğrusaldır; bir iş bittiğinde diğeri çalışır.
- Web sunucuları gibi aynı anda çok sayıda işin yürütülmesi gereken durumlarda doğrusal kod sorun çıkarır.
- Erken dönem web, bu sorunu çözmek için thread kullanımını devreye sokmaya çalıştı.
- Thread'ler kullanılarak aynı anda birden fazla istemci işlenebilir, ancak programcılar eşzamanlılığı OS alanından kullanıcı alanına taşımak istedi.
Timeout sorunu
- Rust'ın en büyük avantajlarından biri birleştirilebilirlik (composability).
async/await, bu birleştirilebilirliği I/O-bound fonksiyonlara uygulamayı mümkün kılar.
- Örneğin, istemci işleme fonksiyonuna timeout eklemek istediğinizde bunu iki combinator kullanarak gerçekleştirebilirsiniz.
Tematik thread'ler
- Thread kullanılan örneklerde timeout uygulamak kolay değildir.
TcpStream içinde set_read_timeout ve set_write_timeout fonksiyonları vardır, ancak bunları kullanmak sınırlıdır.
- Yazı, Rust combinator'leriyle timeout programlamanın bir yolunu gösteriyor; ancak bu yöntem
TcpStream ile sınırlı ve ek sistem çağrıları gerektiriyor.
Async'in başarılı kullanım örnekleri
- HTTP ekosistemi, ana runtime mekanizması olarak
async/await'i benimsedi.
tower, timeout, rate limiting ve load balancing sağlayarak async/await'in gücünü gösteren bir örnek.
macroquad, motoru çalıştırmak için async/await kullanan bir Rust oyun motoru.
Async'in imajını düzeltmek
async'in faydaları yeterince bilinmediği için bazı kişiler bunu yanlış anlayabiliyor.
- Rust topluluğu,
async Rust'ın performans avantajlarını abartma ve anlamlı faydalarını küçümseme eğiliminde.
async/await, senkron Rust'ta onlarca thread ve kanal olmadan ifade edilemeyen kalıpları kısa ve net biçimde ifade edebilen güçlü bir programlama modeli olarak görülmeli.
GN⁺ görüşü
async/await, eşzamanlılığı ele alırken kod karmaşıklığını artırsa da aynı anda çok sayıda istemciyi verimli biçimde işleyebilme yeteneği sunar.
- Bu yazı,
async/await'in yalnızca performans avantajı değil, programlama modeli açısından da güçlü yönleri olduğunu vurguluyor.
- Rust'taki
async/await, çeşitli I/O işleri için birleştirilebilirlik sağlar; bu da özellikle ağ servisleri veya web sunucuları gibi alanlarda faydalıdır.
- Eleştirel açıdan bakıldığında,
async/await karmaşıklığı yeni başlayan geliştiriciler için giriş engeli olabilir ve bunu aşmak için eğitsel çaba gerekir.
- Benzer işlev sunan diğer projeler arasında Node.js'in
async/await uygulaması ve Python'un asyncio kütüphanesi bulunur; bunlar da benzer bir paradigma sunar.
async/await benimsenirken kod karmaşıklığı ve bakım kolaylığı dikkate alınmalı; ancak aynı anda çok sayıda istemci işlenmesi gerekiyorsa bu model büyük avantaj sağlar.
1 yorum
Hacker News görüşü
Async/await ve tek iş parçacığı
Mutexvecrossbeam-channelkanalları adil değildir.Async/await ve iş parçacıkları
Yazıyla ilgili sorunlar
Ele alınmayan noktalar
İptal konusundaki önemli nokta
Async/await için pazarlama benzeri kampanya
Async/await ve fiber'lar
Rust'ta async/await'in başlıca avantajları
Async/await hakkındaki yanlış anlamalar
Async/await yerine neden iş parçacığı değil