2013-03-20 40 views
19
  1. Ben G/Ç, iplik havuzlu, * Nix platformda haksız mıyım node.js zaman uyumsuz dosyayı gerçekleştirmek için libeio içten kullanmak öğrendik node.js?
  2. Async hakkında ağı G/Ç? Libev tarafından mı yapıldı? Ayrıca bir iplik havuzu var mı?
  3. İçeride iş parçacığı havuzu varsa, istek başına geleneksel tek iş parçacığı modelinden daha verimli nasıl olabilir? Ve I/O talebi başına bir iş parçacığı mı?
  4. Ve pencerelerdeki mekanizma nedir? Biliyorum, IOCP tarafından yapıldı, ve bir çekirdek seviyesi iş parçacığı havuzu var, değil mi?
  5. Neden linux Windows IOCP gibi tamamen doğal bir AIO mekanizmasına sahip değil? Gelecekte olacak mı? changchang cevabı göre

Güncelleme: Karışıklık iç asenkron I/O mekanizmasını

  1. Ben verdik @changchang source code hızlı bir görünüm aldı merak ediyorum varsayılan parçacığı havuzu boyutu UV_THREADPOOL_SIZE sıfırlanabilir bulundu Bu durumda kullanılacak?
  2. Ayrıca bu iş parçacığı havuzu kullanmak getaddrinfo buldum, fs dışında başka var mı? Ve tüm senkronizasyon işleri bu iş parçacığı havuzunda yapılacaksa, varsayılan boyut '4' yeterli mi?
  3. Anlayışım olarak, node.js işleminde 6 temel konu olacak: 1 V8 iş parçacığı (olay döngü, kullanıcı javascript kodlarının çalıştığı), 1 libuv olay döngüsü ve 4 iş parçacığı havuzu, doğru muyum?
  4. Ve bu konuları kabuğumda (Ubuntu) nasıl görebilirim? ps -eLf | kullanıyorum grep düğümü | grep -v grep sadece gördüğümüz iki:

    kök 16148 7492 16148 0 2 20:43 puan/26 00:00:00 ./bin/node
    kök 16148 7492 /home/aaron/workspace/test.js 16149 0 2 20:43 puan/26 00:00:00 ./bin/node tüm

+0

buraya bakınız http://stackoverflow.com/questions/10680601/nodejs-event-loop – user568109

+1

node.js aslında soyut için [libuv] (https://github.com/joyent/libuv/) kullanan Desteklenen tüm platformlar için eşzamansız IO – Milan

+0

@ user568109 Bunu okudum, ancak ondan doğru yanıt alamıyorum, aslında, net olmayan ifadeler beni daha fazla karıştırıyor. Libeio 'soket dahil olmak üzere giriş çıkışını senkronize olmayan bir şekilde gerçekleştirir' den söz ettiğinden şüphem var. Bunu bir yerden öğrendim: çünkü düzenli dosyalarda epoll kullanamamaktadır, bu yüzden iş parçacığı ile birlikte gerçekleştirmek için libeio geliyor. –

cevap

24
  1. İlk /home/aaron/workspace/test.js, libuvlibeio ondan kaldırdığı . Ancak, sözdiziminde olduğu gibi libeio gibi bir iş parçacığı havuzuyla eşzamansız I/O dosyasını gerçekleştirir.

  2. libuv ayrıca libev'u kaldırır. Bir iş parçacığı havuzu olmadan, epoll, kqueue ve IOCP gibi farklı platformlardaki async I/O arabirimlerini temel alan async ağ G/Ç yapar. I/O olaylarını yoklayan ve işleyen uv ana iş parçacığı üzerinde çalışan bir olay döngüsü vardır.

  3. libuv'un içindeki iş parçacığı havuzu sabit boyutlu bir iş parçacığı havuzudur (4 in uinx like system). Bir görev sırası görevi gerçekleştirir ve istekleri arttığında süresiz olarak iş parçacığı oluşturarak sistem kaynaklarının tükenmesini önler. uyumsuz I olay döngü ve libeio çalıştırmak için libev kullanılan

+0

Tanklar çok, çok fazla kaynak var güncel değil, beni kurtardın! –

+2

@AaronWang Sorunuzu cevapladıysa bunu kabul etmelisiniz. – travis

+0

AFAIK düğümü, libuv iş parçacığı havuzu boyutunu çekirdek sayısı olarak ayarlar –

2

Uptil sürüm 0.6 düğüm/O (Unix arka uç Bu iki kütüphaneden ağır oturur).Ancak libuv, version 0.8'da libev ve libeio'un yerini almaya başladı. Etkinlik havuzundaki tüm etkinlik ve olayları gerçekleştirir, yönetir ve yönetir. libuv, platformlar arası eşzamansız IO kitaplıklarında seçimdir.

  1. Evet, kadar düğüm 0.6, 0.8 kullanımdan kaldırılmış ve
  2. Evet parçacığı havuzu

  3. kullanır ama libev parçacığı havuzu kullanmaz. here

    açıklık getirilmesinin bakınız: Ben yayınlanmıştır question içinde link göre, libeio I ile uğraşan tüm POSIX fonksiyonları desteklemiyor/O (soket içerir). Ancak, düğüm, yalnızca eşzamansız I/O dosyası için kullanmaya karar verdi ve ağ G/Ç için libev'u kullanır. Nereden duydunuzu bilmiyorum ama düzenli dosyalarda epoll kullanabilirsiniz. Olay döngüsünü bu nedenle burada sorun olmaksızın.

  4. Evet IOCP Windows'da zaman uyumsuz G/Ç işlemlerini gerçekleştirir, çekirdek iş parçacığı havuzlarını kullanır.
  5. Yeni linux çekirdeğinin yeni BSD çekirdeğinde epoll, kqueue var. libev ve libeio linux ortamı içindi ve tüm çekirdek için olay döngüsü/async IO sağlar (select, poll, epoll, kqueue destekler).

Güncelleme soruları:

  1. çok yaklaşık libuv
  2. belki yeterince bilmiyorum (bilmiyorum) İşte
  3. Process Explorer yoluyla kontrol, Windows 8'de benim bulgulardır. Bir düğüm uygulama işlemi için 4 konu, 1 DLL, 1 Dosya ve 1 Bölüm (toplam 7 giriş) gösterildi.

  4. ps -eLf bütün konuları ve süreçleri göstermektedir, belki aşırı filtreleme bunu, sadece x düğümü süreci için pid ps -eLf | grep x gibi düğüm süreç kimliğinin aramaya vardır.

+0

Teşekkürler. Ben denedim ps -eLf | grep pid', hala aynı çıktı –