POSIX durumu zaman uyumsuz G/Ç (AIO)?
Sayfalar ayrıntı değişen miktarlarda POSIX AIO imkanları açıklayan web dağınık. Hiçbiri çok yakın. Tam olarak tarif ediyorlar ne olduğu belli değil. Örneğin, "" (?) resmi web site for Linux kernel asynchronous I/O support here yuva iş yok, ama "aıo.h" keyfi dosya tanımlayıcıları için benim Ubuntu üzerinde çalıştığını ima görünüyor tüm 8.04.1 istasyonu kılavuz sayfaları. another project that seems to work at the library layer bile daha az belgeleri var.
Bilmek istiyorum:
- POSIX AIO amacı nedir? Bulurum bir uygulama bunun en bariz örneği yuva desteklemiyor diyor göz önüne alındığında, bütün bu iş bana garip geliyor. Sadece zaman uyumsuz disk G/Ç? Eğer öyleyse, neden hiper-genel API? Neden disk g/saldırıya uğrayan ilk şey O değilse?
- Nerede örneği vartamamlayınBak ben bu AIO programları POSIX?
- Birileri bunu gerçekten kullanıyor mu?
- Platformlar POSIX AIO ne desteği? Ne bu parçaları destekliyorlar mı? Herkes çok destek ima "Herhangi/herhangi FD ** 0 * söz gibi görünüyor"?
Diğer çoklu mekanizmalar bana uygun gayet iyi, ama bilgi rasgele parçaları beni meraklandırdı var orada etrafında yüzen.
CEVAP
Soket verimli I/O yapıyor kqueue, epoll, G / Ç tamamlama bağlantı noktaları ve seviyor ile çözüldü. İşin zaman uyumsuz dosya g/Ç geç comer (dışında windows' çakışan G/Ç ve posıx AIO için erken destek solaris). bir bakıma
Eğer G/Ç yuva yapmak için arıyorsanız, muhtemelen yukarıdaki mekanizmaları kullanarak daha iyidir.
Ana amaç AIO ise, bu sorunu çözmek için zaman uyumsuz disk G/Ç Bu büyük olasılıkla neden Mac OS X destekler AIO için düzenli dosyalar, soketler (beri kqueue yapan çok daha iyi zaten).
Yazma işlemi genellikle çekirdek tarafından önbelleğe alınır ve daha sonra temizlendi. Sürücünün okuma kafası konumu ile geçmek olduğunda örneğin blok yazılmadı.
Eğer öncelik ve sipariş için çekirdek istiyorsanız ancak, okuma işlemleri için, gerçekten tek seçenektir AIO okur. Bu kernel (teorik olarak) daha iyi herhangi bir kullanıcı düzeyinde uygulama daha yapabilir işte bu yüzden:
- Çekirdek O değil, sadece uygulamalar disk işim ve küresel düzeyde sipariş verebilir Tüm disk görür
- Çekirdek (Mayıs) disk kafası okuma ve optimum sırada ona iletirsin okuma işlerini almak, kafa en kısa mesafe taşımak için
- Çekirdek native command queuing avantaj okumak işlemlerinizi daha da iyileştirmek için alabilir
- Sen-ebilmek muktedir sorunu daha fazla okuma işlemi başına sistem çağrısı kullanılarak lio_listio() daha readv(), özellikle eğer okur değil (mantıksal olarak) bitişik, tasarruf bir nebze sistem çağrı Tepegöz.
- Program okunan bir blok veya çağrı yazmak için ekstra bir iş parçacığı gerekmez beri AIO ile biraz daha basit olabilir.
Bu, posıx AIO, örneğin: oldukça garip bir arayüze sahiptir. " dedi
- Olay geri çağrıları, verimli ve iyi desteklenen tek anlamı zor kullanarak sinyal sayılar anlamına geldiği bir kütüphane kullanmak için işlem genel bir sinyal ad kılan sinyalleri, üzerinden. Eğer OS değil destek gerçek zamanlı sinyaller, bu da demek zorunda döngü ile tüm bekleyen istekleri için anlamaya hangisi gerçekten bitmiş bu dava için Mac OS X için örnek, Linux). Bir çok iş parçacıklı ortamda alıcı sinyalleri de karmaşık bir kısıtlama yapar. Genellikle sinyal işleyicisi içinde olay tepki vermiş olabilir, ama bir sinyal yükseltmek, bir boru yazmak veya signalfd kullanmak zorunda() (linux üzerinde).
- () lio_suspend seçmek gibi aynı sorunları var (), çok iyi işlerin sayısı ile ölçek değil.
- uygulanan iletebilirsiniz işleri oldukça sınırlı sayıda taşınabilir bir şekilde bu sınırı bulmak için önemsiz değildir. () lio_listio, Aramalısın sysconf(_SC_AİO_LİSTİO_MAX), başarısız olabilir, bu durumda kullanabilirsiniz AİO_LİSTİO_MAX tanımlamak, ille tanımlanmış, ancak daha sonra kullanabilirsiniz 2, olarak tanımlanır garantili destekledi.
Gerçek dünya uygulamaları için posıx AIO kullanarak, destek tanıtırken (lighty) performance measurement gönderemediği lighttpd bir göz atın.
En posıx platformlar posıx şimdi AIO (Linux, BSD, Solaris, AİX, tru64) destekler. Windows çakışan dosya g/Ç Benim anlayış sadece Solaris, Windows ve Linux gerçekten uyumsuz destekleyen yoluyla destekler. Diğer İşletim Sistemleri zaman uyumsuz taklit ise sürücü tüm yol aşağı Ey, I/dosya. O çekirdek iş parçacığı ile. Linux istisna olmak üzere, yerel uyumsuz ben ise abone olarak giriş taklit posıx AIO uygulaması kullanıcı seviyesi ile zaman uyumsuz işlemler iş parçacığı, (() io_submit vb.)/Ç arabirimi gerçekten sürücü için sürücü destekler varsayarak uyumsuz.
İşletim sistemleri arasında oldukça yaygın herhangi fd için posıx AIO destek değil, ama düzenli dosyalar ile sınırlamak için olduğuna inanıyorum.
Nasıl dosyaları zaman uyumsuz olarak y...
Ne zaman uyumsuz bir çağrı yanıt veril...
Ne zaman uyumsuz bir Görev<T> yö...
zaman uyumsuz vs-engelleme olmayan...
nasıl ve zaman uyumsuz kullanmak `ve` ...