SORU
10 ŞUBAT 2013, Pazar


Nasıl Node.js tek dişli olmayan IO model çalışmaları engelleme

Node bir programcı değilim, ama kaç kişi var merak ediyorumtek dişli olmayan IO model engelliyorçalışır. Ancak, bu makaleyi okuduktan sonra understanding-the-node-js-event-loop, bu konuda gerçekten kafam karıştı.

Modeli için bir örnek verdi:

c.query(
   'SELECT SLEEP(20);',
   function (err, results, fields) {
     if (err) {
       throw err;
     }
     res.writeHead(200, {'Content-Type': 'text/html'});
     res.end('<html><head><title>Hello</title></head><body><h1>Return from async DB query</h1></body></html>');
     c.end();
    }
);

İşte benim sorum:

İki isteği(önce gelir) ve B olduğunda, yalnızca tek bir iş parçacığı olduğundan, sunucu taraflı program isteği Bir ilk işleyecektir. Aslında uyku bir açıklamam için ayakta olan, SQL sorgulama, yapmayı bekleyen G/Ç. Program "I O dur, ve olamaz/web sayfası oluşturur. kod Çalıştır" sıkıştı

Program Bekleme sırasında istemek için B geçecektir?

Tek bir iş parçacığı modeli çünkü benim görüşüme göre, başka bir isteği geçmek için yol yok. Ama örnek bir kod adı olduğunu söyledi< . "her şey senin kodu dışında paralel gidiyor".

Asla Node. eskiden beri (P. S Eğer kodu yanlış anladım mı emin değilim)

Nasıl Düğüm Bekleme sırasında B için Bir anahtar mı? Ve size açıklayabilirtek dişli olmayan IO model engelliyor4 ** basit bir şekilde?

Eğer bana yardımcı olabilirseniz seviniriz. :)

CEVAP
10 ŞUBAT 2013, Pazar


Node.js olduğu üzerine inşa libuv, bir çapraz platform Kütüphanesi özetleri API/sistem çağrıları için asenkron (engellenmeyen) giriş/çıkış tarafından sağlanan Desteklenen İşletim Sistemleri (Unıx, OS X ve Windows en azından).

IO zaman uyumsuz

Bu programlama modeli açık/okuma/aygıtlar ve kaynaklar (yuva, dosya sistemi, vb.) yazma işlemi tarafından yönetilen dosya sistemiiş parçasıyla blok yok(c-gibi tipik senkron modeli) olarak ve sadece süreci (kernel/OS düzeyi veri yapısı) işareti yeni bir veri veya olayları mevcut olduğunda bildirim almak. Web-server gibi bir uygulama durumunda, işlemin Tebliğ olaya ait anlamaya ve istek işleme devam edin o zaman sorumludur. Unutmayın bu mutlaka anlamına olacaksın bir yığın farklı kareden diğerine kökenli isteğine işletim sistemi olarak ikincisi oldu teslim sürecin memuru için bir tek iş parçacıklı işlem için bir tanıtıcı yeni olaylar.

Tarif ettiğim model ile sorun doğal olmayan sıralı olarak ve programcı için bir neden tanıdık da zor değil. "İşlevi, Bir istek yapmak ve sizin yerliler genellikle bulunmayan farklı bir işlev sonucu ele almak gerekir."

Düğüm modeli (Devam Geçirmeden Tarzı ve Olay Döngüsü)

Düğüm sorun javascript dilinin özellikleri, bu modeli daha küçük senkron görünümlü belirli bir programlama stili istihdam programcı uyararak yapmak yararlanarak ele almaktadır. Her fonksiyonu istekleri IO bir imza gibi function (... parameters ..., callback) ve ihtiyaçlarını karşılamak üzere, belirli bir geri çağırma olacak çağrıldığında istenen işlem tamamlanır (unutmayın, çoğu zaman geçirdi bekliyorum OS için sinyal tamamlanma zamanı olabilir geçirdi yapmaktan başka bir iş). Javascript desteği için kapaklar kullanın değişkenler ettik tanımlanan dış (arama) fonksiyonu içinde vücudun geri - bu izin için devam devlet arasında farklı işlevleri olacak çağrılan düğümün bağımsız olarak çalışma zamanı. Ayrıca Continuation Passing Style bkz.

Bir işlevi, bir G / Ç işlemi yumurtlama yürütmesini sonra ayrıca, arama fonksiyonu genellikle return düğüm için kontrol ederolay döngüsü. Bu döngü bir sonraki ya da geri yürütme (ilgili olay OS ile haberdar oldu, çünkü en büyük olasılıkla) için planlanmış işlevi - bu, birden çok kişi aynı anda işlenmesini sağlar çağırır.

Düğümün olay döngü olarak düşünebilirsinizbiraz çekirdek dağıtıcısı benzer: çekirdek düğüm karşılık gelen bir olay oluştu zaman bir geri arama zamanlama ise infaz için bekleyen IO tamamlandıktan sonra engellenen bir konu zamanlama.

Son derece eşzamanlı, hiçbir paralellik

Son bir söz olarak, "her şey kodunuzu" düğüm kodunuzu gelen istekleri işlemek için izin verir nokta yakalama iyi bir iş yapar . hariç paralel olarak çalışır ibaresi ^em>binlerce insan tek bir iş parçacığı ile yuva açınaynı anda ve tek bir yürütme akışı (bile olsa "her şeyi paralel" muhtemelen doğru değil işte - Concurrency vs Parallelism - What is the difference?) çalışır. diyerek tüm js mantık çoklu sıralama Bu işleri çok iyi için web sunucusu olarak çoğu zaman aslında harcanan bekliyorum ağ veya disk (veritabanı / yuva) ve mantığı yok gerçekten CPU yoğun olduğunu söylemekbu IO bağlı iş yükleri için çalışıyor.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Julian Smith

    Julian Smith

    31 EKİM 2006
  • Phandroid

    Phandroid

    26 Ocak 2009
  • Virtual Riot

    Virtual Riot

    19 Mayıs 2011