Node.js’nin olay güdümlü mimarisi ve diğer dillerde çok iş parçacıklı programlama arasındaki fark nedir?


cevap 1:

Hem olay güdümlü hem de çok iş parçacıklı paradigmada kod bir işletim sistemi işlemi içinde çalışır.

İşlem birden çok iş parçacığı çalıştırdığında, bu iş parçacıkları hem okuma hem de yazma için işlem belleğini (adres alanı) paylaşır.

Node.js'yi destekleyen JavaScript, tasarım tarafından tek iş parçacıklıdır. Her işlevin tamamlanacağı şekilde çalışacağı garanti edilir ve bu işlev çalışması sırasında geçerli işlemde başka hiçbir JavaScript kodu çalışmaz. Doğal olarak eşzamansız olaylar (ağ, disk giriş-çıkışı, zamanlayıcılar, diğer donanım ve işletim sistemi olayları), bu olaylar için sonradan yürütülecek olay döngüsü kuyruğuna işleyiciler (veya geri çağrılar) olarak kaydedilen JavaScript işlevlerini ekleyen motor tarafından işlenir. kuyruğun önündeki işlevler bitti.

Çok iş parçacıklı paradigmada, iki veya daha fazla iş parçacığı kodu paralel olarak çalıştırır, bu nedenle bir işlev çalışması sırasında farklı bir işlemci çekirdeğinde de farklı bir kod parçası çalışabilir, muhtemelen aynı bellek adreslerini okuyabilir veya yazabilir. Paylaşılan belleğe erişimi yönetmek için kod tarafından özel işletim sistemi mekanizmaları (senkronizasyon ilkelleri) kullanılmazsa, bu durum belleğin tutarsız durumuna neden olabilir.



cevap 2:

Bu iyi bir soru, “Node.js’nin olay güdümlü mimarisi ile diğer dillerde çok iş parçacıklı programlama arasındaki fark nedir?”.

Bunu biraz parçalayabiliriz ve kırmalıyız.

  • Düğümün olay odaklı mimarisi.

Olay güdümlü mimari Düğüm'e özel değildir, örn. Tornado (Python), Vertx (Java), Akka (Scala), ReactiveX (çoklu dil).

  • Çok parçacıklı programlama Diğer dillerde.

JavaScript'in tasarım gereği birden çok iş parçacığını desteklemediğini unutmayın. Her ne kadar bildiğim kadarıyla iş parçacığı olarak işlev görebilen web işçilerini desteklese de.

Bu nedenle olay güdümlü Düğüm için benzersiz değildir ve Düğümde çoklu iş parçacığı yapılabilir.

Burada iki soru olabilir: “Olay güdümlü ve çoklu iş parçacığı arasındaki fark nedir” ve “Düğüm ile diğer diller (çerçeveler) arasındaki fark nedir”. Sorunun amacı gibi göründüğü için ikincisine odaklanacağım.

Düğümü özel yapan şey, yazarın web uygulamaları oluştururken IO'yu engellemekten kaçınmak amacıyla oluşturmasıdır. Düğüm topluluğunun kültürü, engellemeyen IO'nun gücünü vurgulamak ve geliştirmektir. Arama engelleme yapan çok fazla 3. taraf kitaplığı bulamayacaksınız. Düğüm kullanan bir geliştirici olarak, kodunuzda ince engelleme işlemleriyle karşılaşmanız olası değildir. Diğer dillerde ise, saf bir geliştirici yanlışlıkla bir veritabanı bağlantısından okumak gibi oldukça verimsiz engelleme çağrıları gerçekleştirebilir.

Bunun dışında, “eşzamanlılık” için çok sayıda modeli gerçekten okumalı ve her birinin artılarını ve eksilerini anlamalısınız. Çoklu iş parçacığının neden bu kadar uzun süre kabul edilebilir olduğunu anlamaya yönelik bonus puanlar.



cevap 3:

kavramsal farklılıklar kafanızı sarmak için oldukça kolaydır.

Olay güdümlü mimaride, programınız sürekli bir tek iş parçacıklı döngüde çalışır (düğümde bazı çoklu iş parçacıkları yapabilirsiniz, ancak şu anda bunun için endişelenmeyin). Bir olay başladığında, programlar boş zamanlarında ele alınacak çağrı yığınında bir iş açılır.

Çok iş parçacıklı mimari genellikle bir eylem beklemesi gerektiğinde yeni bir iş parçacığı gönderir. Böylece, bir veritabanına çağrı yaparsınız ve ihtiyacınız olan her şeyi yerine getirecek ve ihtiyacınız olanı yapacak yeni bir iş parçacığını döndürür ve orijinal iş parçacığını sonuçlandırır veya yeniden birleştirirsiniz.

Bu yöntemlerin her ikisi de farklı şeyler için çok yararlıdır. Olay güdümlü kullanıcı arayüzü ve sunucular için mükemmeldir, çünkü programınız ne zaman yeni bir çift olacağını ve çoğu zaman olayların patlayacağını bilmez. Bir sorunu çok daha küçük parçalara bölmek istediğiniz (veya tek dişli döngünüzün sınırına yaklaştığınız) hesaplamalı olarak ağır işler için diş açma gereklidir.