SORU
9 Ocak 2010, CUMARTESİ


Seç/uyarılar, Twisted vs epoll reaktörler anket

Okuma ve yaşadığım her şeyi ( Kasırga tabanlı uygulamalar ) bana ePoll Seçmek için doğal bir yedek ve Anket tabanlı ağ, özellikle Çarpık olduğunu düşünmeme yol açtı. Bana paranoyak bir fiyat ile gelmek için iyi bir yöntem ya da metodoloji için çok nadir yapar.

Epoll ve alternatifler arasında birkaç düzine karşılaştırmalar okuma epoll açıkça hız ve ölçülebilirlik için şampiyon olduğunu, özellikle doğrusal bir şekilde ölçekler harika gösterir. Dedi ki, işlemci ve bellek kullanımı hakkında ne epoll hala şampiyon.

CEVAP
9 Ocak 2010, CUMARTESİ


Çok küçük sayılar için yuva (ayarlarına bağlı olarak değişir donanım, elbette, ama biz neden bahsettiğin hakkında bir şeyler sipariş 10 veya daha az), seçebilirsiniz yendi epoll bellek kullanımı ve hız zamanı. Yuva gibi küçük sayılar için tabii ki, her iki mekanizma gerçekten vakalarının büyük çoğunluğu bu fark umurunda değil çok hızlı.

Bir açıklama olsa da. Her ikisini de seçin ve ölçek doğrusal epoll. Büyük bir fark olsa da, kullanıcı-bakan API farklı şeyler dayalı karmaşık var. select arama maliyeti yaklaşık geçirdiğiniz en yüksek numaralı dosya tanımlayıcısı değeri ile gider. Eğer tek bir fd seçerseniz, 100, sonra, tek bir fd, 50 seçme gibi yaklaşık iki kat daha pahalı. En altında daha fazla TBS ekleme pratikte bu biraz daha karmaşıktır bu yüzden oldukça boş değil, ama bu çoğu uygulamaları için iyi bir ortam oluşturacaktır.

Epoll maliyeti aslında onlara olayları içeren dosya tanımlayıcıları sayısını daha yakın. 200 dosya tanımlayıcıları takip ediyorsun, ama sadece 100 tanesi onlara olaylar varsa, o zaman (çok kabaca) 100 aktif dosya tanımlayıcıları için ödeme yapıyorsanız. Bu epoll seçmek önemli avantajlarından biri teklif eğilimindedir. Eğer çoğunlukla boş olan bin bir müşteri varsa, o zaman kullandığınızda, hala onlardan biri bin için ödeme yapıyorsanız seçin. Ancak, epoll, sadece herhangi bir anda aktif olanlar için ödeme yapıyorsanız bir kaç - var gibi.

Tüm bu epoll, birçok iş yükü için daha az CPU kullanımı için yol anlamına gelir. Bellek kullanımı gelince, bana atar biraz. select yaptığı son derece kompakt bir şekilde tüm gerekli bilgileri göstermek için (dosya tanımlayıcısı başına bir bit) yönetmek. Ve FD_SETSIZE (genellikle 1024) sınırlaması kaç dosya tanımlayıcıları kullanabilirsiniz select anlamına geldiğini asla harcamak fazla 128 bayt her biri için üç fd ayarlar kullanabilirsiniz select (okuma, yazma, istisna). Bu 384 kıyasla bayt domuz çeşit epoll max. Her dosya tanımlayıcısı multi-byte bir yapı tarafından temsil edilir. Ancak, mutlak anlamda hala çok bellek kullanımı olmayacak. Birkaç düzine KB dosya tanıtıcı çok sayıda (yaklaşık 20k başına 1000 dosya tanıtıcı, bence) temsil eder. Ve ayrıca atmak aslında sahip olduğunuz için harcamak tüm 384 bu bayt ile select eğer sadece izlemek için bir dosya tanımlayıcısı ama onun değeri olur 1024, kanalı bulunurken ile epoll istiyorum sadece harcama 20 bayt. Yine de, tüm bu rakamlar çok fark etmez yani çok küçük.

Ve ayrıca bunlarla sınırlı olmamak dosya tanımlayıcıları FD_SETSIZE için belki de zaten farkında olduğunuz epoll diğer fayda var. Senin gibi o kadar çok dosya tanımlayıcıları izlemek için kullanabilirsiniz. Ve sen tek bir dosya tanımlayıcısı var, ama onun değeri ile FD_SETSIZE, epoll çalışır büyükse de, ama select gelmez.

Rastgele, yakın zamanda select poll göre epoll Bir küçük olumsuzluk keşfettim. Olsa da hiçbiri bu üç API destekler normal dosyaları (örneğin, dosyaları bir dosya sistemi), select poll hediye bu eksikliği destek olarak bildirdiği gibi tanımlayıcıları olarak her zaman okunabilir ve her zaman yazılabilir. Bu onlar için uygun olmayan anlamlı bir türlü engellenmeyen dosya g/Ç, bir biçimde select poll ve olacak karşılaşma bir dosya tanımlayıcısı dosya sistemini en azından devam etmek için çalışır (ya da eğer başarısız olmayacak çünkü select poll), gerçi belki de değil, en iyi performans.

Diğer taraftan, epoll gibi bir dosya tanımlayıcısı izlemek istediğinde hızlı bir hata (**16 yaşında, görünüşe göre) başarısız. Açık konuşmak gerekirse, bu pek doğru değil. Sadece açık bir şekilde destek eksikliğine işaret. Normalde açık hata koşulları alkışlıyorum, ama bu bir (söyleyebileceğim kadarıyla) belgelenmemiş ve tamamen bozuk bir uygulama yerine, sadece potansiyel olarak bozulmuş performansı ile faaliyet gösteren bir sonuç.

Uygulamada, bu gelen gördüğüm tek yer istasyonu. ile etkileşim. Bir kullanıcı stdın yönlendirme veya normal bir dosya/stdout olabilir. Daha önce stdin ve stdout boru ... epoll iyi tarafından desteklenen olurdu oysa o zaman normal bir dosya olur ve epoll yüksek sesle, uygulama kırma başarısız olur.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Chip Johnson

    Chip Johnson

    30 AĞUSTOS 2007
  • humanHardDrive

    humanHardDri

    16 Mart 2011
  • midomansour

    midomansour

    19 EYLÜL 2009