2015-02-22 15 views
6

Tüm bulabildiğim, Çakışan G/Ç'nin nasıl kullanılacağına ilişkin öğreticilerdir, ancak neden böyle adlandırıldığını bulamıyorum.Neden örtüşen I/O olarak adlandırılıyor?

Bunun nedeni örneğin bir soketten bir şey okuyabiliyorum ve daha sonra, okunan ilk okunan okta okunmadan önce başka bir şey okuyabiliyor muyum?

+2

Herkes buna "senkronize olmayan G/Ç" diyor. – rightfold

+0

Eh, bir okuma isteği (veya aynı veya farklı, prizler için çoklu okuma istekleri) verebilirsiniz. Gerçek okuma sizin için yapılacak ve tamamlandıktan sonra size bildirilecektir. –

+0

Çünkü aynı anda birden çok G/Ç işlemi gerçekleştirebilirsiniz, yani birbirleriyle çakışıyorlar. –

cevap

5

Sanırım fikir (20 yıl önce) bir IO'yu başlatabileceğinizi, bazı hesaplamalar yapabileceğinizi ya da daha sonra çalışmayı bekleyebildiğinizi düşünüyorum. Bu nadiren bugün yapılır. Bu düşüncenin, select ve poll'un teknik olarak kabul edildiği bir zamandan geldiğini düşünüyorum.

Daha iyi bir isim eşzamansız IO olur. Diğer her platform buna benzer görünüyor. Microsoft Windows In fact the MSDN documentation mixes the two terms.

+0

Windows, "https://msdn.microsoft.com/en-us/library/windows/desktop/aa365683%28v=vs.85%29.aspx –

+0

@usr" eşzamansız I/O "ifadesini de kullanır. Bugünün şu anki durumu nedir? "Seç" ve "anket" in kullanımdan kaldırıldığını mı söylüyorsunuz? – Rich

+0

@Rich, resmi olarak kullanımdan kaldırılmamışlardır, ancak sonuçta ortaya çıkan programlama modelinde esneklik, kod kalitesi, ölçeklenebilirlik ve mutlak performans sorunları vardır. Bir kütüphanede epoll veya kque kullanmak zor değildir. Bilgilendirilmiş bir kişinin neden bu seçimi seçip seçmediğini göremiyorum. Ve sonra hala daha karmaşık bir ticaret olan async IO üzerinden iplikleri kullanmak için seçiminiz var. – usr

1

Bindirme operasyon herkes OS dilde Asenkron olarak başka bir şey ifade etmiyor.

Örneğinize bağlı kalmak için, bir soket üzerinde okumaya başlıyorsunuz ve başarı için beklemiyorsunuz, ancak tamamen farklı bir şey yapıyorsunuz (belki farklı bir (!) Soket üzerinde okuyabilirsiniz). Sonra ilk işlemin bitip bitmediğini sorun. Bunun için bir olay tanıtıcısı da ayarlayabilirsiniz. Veya tamamlandığında çağrılan bir CALLBACK işlevini verin. Bu durumda, ilk arama işlemlerin geri kalanını "örtüştü".

Ayrıca bkz. wikipedia.

Microsoft'un neden çakıştığını çağıran bir şey olduğunu sanmıyorum, bu bir iş parçacığı başlatmak gibi değil, daha çok bir zaman uyumsuz bir görevi başlatmak gibi bir standart adı yoktu. Bu, std::thread'dan std::async'a benzer.

+0

'Tamamen farklı bir şey yap', isterseniz aynı şeyi yapabilirsin. Tamamlama bildirimleri ele alınmadan önce aynı veya farklı sokete/sese karşı çoklu okuma istekleri verebilirsiniz. –

5

Klasik anlam, 1960'lara (veya daha küçük), yani çakışan G/Ç öğelerinin, birden çok G/Ç aktarımının (normalde her bir G/Ç'nin farklı bir aygıta) aynı anda meydana gelebileceği anlamına gelir (eşzamanlı okumalar gibi) teypten ve diske yazıyor). Bunun için alternatif bir klasik isim eşzamanlı I/O idi.

Overlapped I/O - IBM

Bu DMA benzer kesme ve/veya donanım ile başarılabilir IBM mainframe için

Örnek maddesi (o zaman, DMA donanım uygulamalarında, bazı küçük işlemci grubu gibi daha fazla)

İlgili konular