2012-02-17 17 views
11

Hayal kırıklığına uğrayan HawtDispatch'in web sitesi, bunu "iş parçacığı havuzu oluşturma ve NIO olay bildirimi çerçeve API'si" olarak tanımlar.HawtDispatch, Java'nın Yürütücülerinden farklı mıdır? (ve netty)

Önce 'iş parçacığı havuzu' bölümünü ele alalım. Java tarafından sağlanan çoğu Yürütücü de temel olarak iş parçacığı havuzlarıdır. HawtDispatch nasıl farklı?

Ayrıca bir "NIO olay bildirim çerçevesi API'sıdır." En üstteki NIO'nun, gelen verileri alan ve “iş parçacığı havuzu” nosyonuna geçen ince bir katman olduğunu varsayar ve iş parçacığı havuzu zamanlayıcısı zamanı bulduğunda bir tüketiciye aktarır. Doğru? (NIO üzerinde herhangi bir gelişme karşılandı). Hiç kimse netty vs HD performans analizi yaptı mı?

cevap

17

HawtDispatch, tek bir sistem geniş sabit boyutlu iplik havuzu olarak tasarlanmıştır.

  • Küresel Dağıtım Sıra: Ekleyen Runnable nesneler eş zamanlı yürütülür (Bir Executors.newFixedThreadPool(n) vasisi kullanarak aynı etkiyi elde)
  • Seri Sevk Kuyruk: Ekleyen Runnable nesneler seri yürütülür (Bu uygulayan Java executors 2 tatlar sunar hepiniz küresel ve seri sevk kuyruklar tek sabit boyut parçacığı havuzu paylaşan java infaz modelinin aksine bir Executors.newSingleThreadExecutor() vasisi kullanarak aynı etkiyi)

olsun. İplik sayınızı arttırmadan binlerce seri gönderi kuyruğunu kullanabilirsiniz. Seri gönderme kuyrukları, reaktif aktör stili uygulamalarını yönlendirmek için Erlang posta kutuları gibi kullanılabilir.

HawtDispatch, tüm genel ve seri sıra yürütmelerini işlemek için sabit boyutlu bir iş parçacığı havuzu kullandığı için, yürüteceği tüm Runnable görevleri engellenmemelidir. Bir şekilde bu, sadece bir yerine birden çok iş parçacığı kullanmak dışında, NodeJS mimarisine benzer.

Netty'ye kıyasla, HawtDispatch, soket verilerini gerçekten işlemek için bir çerçeve değildir. Soket verilerini kodlama/kod çözme, arabelleğe alma ve işleme konusunda bir çerçeve sağlamaz. Tek yaptığı veri engelleme olmayan soket üzerinde okunabilir veya yazılabilir olduğunda bir kullanıcı yapılandırılmış Runnable'ı yürütür. Daha sonra soket verilerini okumak/yazmak için size kalmış bir uygulamadır.

+3

Teşekkürler @Hiram. Umarım, Apple'ın libdispatch'i hakkında hiçbir şey bilmeyenlere tanıtmak için HawtDispatch belgelerini genişletin. Açıkçası, bu açıklama iyi bir başlangıç. Belki de sadece Executors'ı kullanarak HD'nin faydaları üzerinde genişleyen bir şey. – Shahbaz

+0

@Shahbaz GCD, kaç CPU çekirdeğinin mevcut olduğuna ve şu anda ne kadar meşgul olduklarına bağlı olarak havuzun boyutunu * ayarlama * ayrıcalığına sahiptir. Kuyruktaki pek çok iş I/O bağlı olduğunda, iş parçacığı sayısının artırıldığını gördüm, dolayısıyla CPU meşgul. Ancak HawtDispatch bunu yapmıyor gibi görünüyor. – adib

İlgili konular