2009-02-12 19 views
29

Çeşitli web hizmetlerine birkaç eşzamanlı çağrı yapan, yanıtlarını toplayan ve daha sonra bu yanıtlardan birkaç hesaplama yapan bir .NET uygulamasına sahibiz. Ek performans elde etmeye çalışırken, IO tamamlama bağlantı noktalarını kullanarak .NET'in IO iş parçacığı kullanan yaklaşımların kullanımını araştırıyordum. Joe Duffy'nin yakın tarihli Windows'taki Eşzamanlı Programlama kitabı da dahil olmak üzere birçok kaynaktan okudum ve onların kullanışlılığını "aldığımda, .NET içindeki davranışları konusunda biraz belirsizim ve kısa bir açıklama arıyorum.".NET, IO Threads veya IO Tamamlama Bağlantı Noktalarını nasıl kullanır?

+1

İlgi çekici olabilir: http://marcgravell.blogspot.com/2009/02/async-without-pain.html –

cevap

25

Şanslar, eşzamansız yöntemleri zaten kullanıyorsanız, hiçbir şey yapmanız gerekmez. Web servisine çağrı yapmak için kullandığınız teknolojiye bağlı olarak, sonuçta, ağdan bayt almak için çağrı yapmak üzere Win32 API'ye düşecek ve bu amaçla, G/Ç Tamamlamasını kullanacaktır. Eşzamansız çağrıları işlemek için portlar.

G/Ç işlemlerinin tamamlanmasının temel dayanağı, G/Ç işlemlerinde beklerken, G/Ç işlemlerinin tamamlandığında beklediği bir iş parçacığı havuzu olmasıdır (G/Ç işleminin tamamlanması için kayıt olduğunuz varsayılarak) bağlantı noktaları). Kayıtlı işleminiz tamamlandığında, I/O tamamlama noktası iş parçacığı havuzundan gelen iş parçacığı, geri bildirimi işlemek için kullanılır.

Elbette, G/Ç tamamlanma bağlantı noktasını çağırdıktan sonra, iş parçanız daha fazla iş yapmak için devam edebilir veya sonlandırılabilir, seçim size kalmış.

tarif yardımcı olmalıdır aşağıdaki daha:

G/Ç tamamlama Portları:

http://msdn.microsoft.com/en-us/library/aa365198(VS.85).aspx

İçinde G/Ç tamamlama bağlantı noktaları (Wayback Machine):

https://web.archive.org/web/20101101112358/http://doc.sch130.nsc.ru/www.sysinternals.com/ntw2k/info/comport.shtml

+0

Hakkında IO arazisinde IO kapalıyken iş yapan bir ortak havuz tam olarak ne için umuyordum. Açıklama için teşekkürler. –