2008-11-14 14 views

cevap

4

ben merkezli iplik soru değil vs olay bazlı düşünmek - bir tıkanmasızdır Çoğullaştınlmış I/O, Seçilebilir prizler, iplik havuz çözümü vs çözümdür. İlk durumda

bunu tek bir 'dinleyici' reads- üzerinde hiçbir engelleme yoktur bakılmaksızın BT kullandığını ne geliyor tüm giriş işlemlerini gerçekleştiriyoruz. Tek dinleyici iş parçacığı, her bağlantı için bir değil, farklı türlerde çalışan iş parçacıklarına veri iletir. Yine, herhangi bir veriyi yazmayı engellemediğinden, veri işleyicisi bununla birlikte çalışabilir. Bu çözüm çoğunlukla IO okuduğundan/yazdığından dolayı çok fazla işlemci zamanı kalmaz, böylece uygulamanız istediği her şeyi yapabilir. Bir iş parçacığı havuzu çözümde

her bağlantıyı ele bireysel konuları var, bu yüzden bağlam içinde anahtar ve 'dinleme' out her biri için zaman paylaşmak zorunda. Bu çözümde, CPU + IO ops aynı zaman dilimindedir ve bu da bir zaman dilimi alır ve böylece CPU zamanı kullanmadan geleneksel olarak yapılabilen iş parçacığı (bloklama) için IO ops beklenir. daha DETAIL- için IO engellenmeyen ve çok iplik havuzları vs bazı karşılaştırmalar bulmak prob olabilir için

hakkında.

+0

Yanıt için teşekkürler. – dowski

0

Gerçekten parçacıkları ilgili değil (herkes bu noktaları netleştirmek eğer, çekinmeyin). Konuların hizmet isteklerinde kullanılmasıyla ilgilidir. Lighttpd gibi bir şey için, olaylar üzerinden birden çok bağlantıya hizmet veren tek bir iş parçacığınız vardır. Apache'nin eski sürümlerinde, bağlantı başına bir işleminiz vardı ve süreç gelen verilerde uyandı, böylece çok sayıda istek olduğunda çok büyük bir sayıya sahip oldunuz. Ancak şimdi MPM apache ile olay da dayanmaktadır apache MPM event gör.

1

Gerçekten yaptığınız şeye bağlıdır; Olay tabanlı programlama, belirgin olmayan uygulamalar için kesinlikle zor. Bir web sunucusu olmak gerçekten çok iyi anlaşılmış bir problemdir ve hem olay odaklı hem de dişli modeller modern işletim sistemlerinde oldukça iyi çalışır.

Doğru bir olay modelinde daha karmaşık sunucu uygulamaları geliştirmek genellikle oldukça zordur - parçacıklı uygulamalar yazmak için çok daha kolay. Bu, performanstan ziyade karar verici faktör olabilir.

3

Olay odaklı uygulamalar doğal olarak daha hızlı değil bulunmaktadır. Why Events Are a Bad Idea (for High-Concurrency Servers) itibaren

:

We examine the claimed strengths of events over threads and show that the 
weaknesses of threads are artifacts of specific threading implementations 
and not inherent to the threading paradigm. As evidence, we present a 
user-level thread package that scales to 100,000 threads and achieves 
excellent performance in a web server. 

Bu Şüphesiz, modern işletim üzerine diş durumu o zamandan bu yana iyileşmiştir 2003 yılında oldu.

Etkinliğe dayalı bir sunucunun temelini yazmak, kodunuzda, büyük olasılıkla uygun ön-boşaltma çoklu görevlerini destekleyen bir işletim sistemi üzerinde ve saydam içerik değişiminin yararı olmadan, kooperatif çoklu görevini (Windows 3.1 stili) yeniden icat etmek anlamına gelir. . Bu, normalde yönerge göstericisinin ima ettiği veya yığın değişkeninde saklanan yığındaki durumu yönetmeniz gerektiği anlamına gelir. (Eğer dilinizde varsa, bu ağrılar önemli ölçüde azalır. C içinde bunu yapmaya çalışmak çok daha az eğlencelidir.)

Bu aynı zamanda, kooperatif çoklu görev emrindeki tüm uyarıları kazanmanız anlamına gelir.Etkinlik işleyicilerinden biri herhangi bir nedenle çalıştırmak için biraz zaman alırsa, o olay iş parçacığını bekler. Tamamen ilgisiz talepler gecikiyor. Bundan kaçınmak için uzun süre CPU işlemine gerek duyan operasyonlar bile başka bir yere gönderilmelidir. Yüksek eşzamanlı bir sunucunun çekirdeğinden bahsederken, 'uzun çalışma', saniyede 100.000 isteği ele alması beklenen bir sunucu için mikro saniye cinsinden göreli bir terimdir. Umarım sanal bellek sistemi asla sizin için diskten sayfa çekmemelidir!

Etkinlik tabanlı bir mimariden iyi performans almak, özellikle de yalnızca iş hacmini değil, gecikmeyi düşündüğünüzde zor olabilir. (Elbette, siz de parçacığı ile yapabilirsiniz hatalar var bolluk eşzamanlılık sert hala..) Yeni bir sunucu uygulaması yazarı için

Birkaç önemli sorular:

  • nasıl ipler gerçekleştirmek do Bugün desteklemeyi düşündüğün platformlarda mı? Senin darboğazın mı olacak?
  • Hala bozuk bir iplik uygulamasında kalıyorsanız: neden kimse bunu düzeltmiyor?
İlgili konular