2010-03-05 17 views
8

Bir temsilci kullanma Asenkronize olarak herhangi bir işlevi çağırabilirim. Anladığım belgelerden, bu iş parçacığı için bir workitem kuyruğa alınarak yapılır.Eşzamansız çağrılar ve asenkronize io çağrıları arasındaki fark .net

Aynı zamanda IO işlevlerine (yuva, dosya, web sayfası vb. Okuma gibi) eşzamansız çağrılar da gerçekleştirilebilir. Bence (ama emin değilim) bu threadpool bir workitem doğurmaz. Sadece sonuç elde edildikten sonra (veya bir hata), threadpool'daki yeni bir iş parçacığı denilen çağrıdır.

Bu varsayım doğru mu? Ya da eşzamanlı bir IO çağrısı, aynı zamanda kapakların altında sadece ortaya çıkan bir iplik var mı? Eğer durum buysa, eşzamansız çağrılar yumurtlama ipliklerinden (threadboard kullanarak) kendinizinkinden daha iyi bir performans olabilir ve nasıl bloke edilebilir?

Ayrıca: herhangi bir zamanda kaç tane eşzamanlı çağrı yapılmıyor olabilir? Bir threadpool kullanılıyorsa, istediğiniz kadar tahmin ediyorum. Ancak IO asenkronize çağrılarda, bir sınır var mı? Ve öyle, sınırın ne olduğunu nereden biliyorsun?

cevap

7

Asenkron IO, iş parçacığı havuzundan başka bir iş parçacığı kullanmaktan çok daha karmaşık bir şeydir. tek bir cihaz karşı aynı anda birden çok I/O talepleri yapmak için

faydalı değil bir aygıt çekirdek nesnesi Sinyal

1:

çok farklı yöntem OS içinde asenkron IO destek vardır. Bir iş parçacığının bir G/Ç isteğini ve işlemek için başka bir iş parçacığı yayınlamasına izin verir.

tek bir cihaz karşı aynı anda birden çok I/O isteklerini sağlar bir olay çekirdek nesnesi Sinyal. Bir iş parçacığının bir G/Ç isteğini ve işlemek için başka bir iş parçacığı yayınlamasına izin verir.

tek bir cihaz karşı aynı anda birden çok I/O isteklerini sağlar Duyurulabilir I/O kullanılması. Bir G/Ç isteği yayınlayan iş parçacığı da işlemek zorundadır.

4 kullanma I/O bağlantı noktası tamamlama

tek bir cihaz karşı aynı anda birden çok I/O isteklerini sağlar. Bir iş parçacığının bir G/Ç isteğini ve işlemek için başka bir iş parçacığı yayınlamasına izin verir. Bu teknik yüksek oranda ölçeklenebilir ve en fazla esnekliğe sahiptir.

+0

@sergey: Yani gerçekten bir fark olduğunu söylüyorsunuz. Öyleyse kaç tane IO'nun istediği herhangi bir zamanda kan talep ediliyor? Sweetspot nedir? Bu, IO'nun hedefine ya da başka bir şeye bağımlı mı? Birisi nasıl bilebilir? – Toad

+0

Simle cevap: buna bağlı. IO Tamamlama bağlantı noktalarını kullanırsanız (bu en karmaşık ancak en güçlü tekniktir) OS, tüm etkin IO görevlerini ele almak için mümkün olduğunca az iş parçacığı (donanım yapılandırmanıza bağlı olarak) oluşturacaktır. Uyarlanabilir IO kullanmak, her biri için bir iş parçacığı gerektirir! IO işlemleri beklemede. İşte bu yüzden IO Coplection portları çok daha etkili ve ölçeklenebilir: siz çok iş yapabilirsiniz! simultanious IO en az kaynak ile talepleri. Tüm bunları anlayabilmek için "C/C++ aracılığıyla Windows" veya "Sunucu tarafı uygulaması programlama" nın Jeffrey Richter tarafından okunması gerektiğini düşünüyorum. Oldukça zor şeyler! –

+0

@reinier Sınırlar, CPU sayınızdan Windows lisans anahtarınıza kadar olan her şeyi temel alır. Fakat sınırlar önemli değil - BCL tarafından size sunulan eşzamansız yöntemleri kullandığınız sürece, bildiğiniz gibi * sizden daha iyi bir ölçeklenebilirlik elde edersiniz. 'QueueUserWorkItem'. – bzlm

İlgili konular