3.9. Uygulamayı Ölçeklendirme

Node.js single-thread modda çalışır, ancak eşzamanlılığı idare etmek için olay odaklı bir paradigma kullanır. Ayrıca, çok çekirdekli CPU tabanlı sistemlerde paralel işleme uygulamak için alt (child) işlemlerin (process) oluşturulmasını kolaylaştırır.

Alt işlemler her zaman ana işlemin stream’leri ile paylaşılabilen üç stream olan child.stdin, child.stdout ve child.stderr’a sahiptir. Node.js, bir alt işlem oluşturmak için aşağıdaki üç ana yönteme sahip olan child_process modülünü sağlar.

  • exec – child_process.exec yöntemi, bir kabuk / konsoldaki bir komutu çalıştırır ve çıktıyı arabelleğe alır.
  • spawn – child_process.spawn belirli bir komutla yeni bir işlem başlatır.
  • fork – child_process.fork yöntemi, alt işlemleri oluşturmak için spawn () özel bir durumdur.

exec Metodu

child_process.exec yöntemi bir Console/Terminalde bir komut çalıştırır ve çıktıyı arabelleğe alır.

Parametreler:

  • command (String): Boşluk Çalıştırılacak komut, (boşluk karakteri ile ayrılmış argümanlar şeklinde yazılır)
  • options (Object): aşağıdaki seçeneklerden bir veya daha fazlasını içerebilir.
    • cwd (String): Alt işlemin çalıştığı geçerli dizin
    • env (Object): Anahtar-değer çiftleri
    • encoding (String): (Geçerli değer: ‘utf8’)
    • shell (String): Komutların çalıştırılacağı kabuk. (UNIX, WINDOWS, IOS ortamlarında farklı kabuklar vardır. Örneğin Windows’ta cmd.exe gibi)
    • timeout (Number): (Geçerli değer: 0)
    • maxBuffer (Number) (Geçerli değer: 200*1024)
    • killSignal (String) (Geçerli Değer: ‘SIGTERM’)
    • uid (Number): İşlemin kullanıcı kimliğini ayarlar
    • gid (Number): İşlemin grup kimliğini ayarlar.
  • callback: Bu fonksiyon error, stdout, and stderr adında üç argüman alır. Bu argümanlar process sona erdiğinde çıktı için kullanılır.

Bu örnek için destek.js ve ana.js olmak üzere iki dosya kullanılacaktır. Öncelikle destek.js:

argv[2] nasıl aldığına dikkat. Bu bilgi diğer taraftan boşluk kullanılarak gönderilecektir. Örneğin “node destek.js 3” gibi bir veride argv[2] 3 değerini döndürür. (Öğrencilerim C ve C# anlatırken argümanların nereden geldiğini hatırlamışlardır. – C main argument şeklinde bir googling yapabilirsiniz.) Gelelim ana.js dosyasına:

“child_process.exec(‘node support.js ‘+i” kodu ile bir alt işlem çalıştırılır. Yukarıdaki örnekte alt işlem 4 defa çağrılmıştır ve argüman olarak döngünün i değeri gönderilmiştir. Çıktısı:

spawn() Metodu

spawn() metodu belirli bir komutla yeni bir işlem başlatmak için kullanılır.

Parametreler:

  • command (String): Çalıştırılacak komut
  • args (Array): Argümanların listesi – string türünden
  • options (Object) aşağıdaki seçeneklerden bir veya daha fazlasını içerebilir.
    • cwd (String): Alt işlemin geçerli çalışma dizini.
    • env (Object): Anahtar-değer çifti.
    • stdio (Array): Altın stdio ayarları – string türünden.
    • customFds (Array): Stdio için kullanılacak child (alt) için kaldırılmış dosya tanımlayıcıları.
    • detached (Boolean): İşlem grup lideri olan alt.
    • uid (Number): İşlemin kullanıcı kimliğini ayarlar
    • gid (Number): İşlemin grup kimliğini ayarlar.

Spawn () metodu stream döndürür (stdout & stderr) ve işlem belirli bir miktar veri döndürdüğünde kullanılmalıdır. spawn (), işlem yürütülmeye başlar başlamaz yanıtı almaya başlar. Bir önceki örnekte olduğu gibi iki dosyamız olsun. destek.js yukarıdaki gibi ve ana.js aşağıdaki gibi tekrar düzenliyoruz.

Ekran çıktısı:

fork() Metodu

Node işlemleri yaratmak için spawn metodunun özel bir durumu olan metottur.

Parametreler:

  • modulePath (String) Altta çalışacak modül.
  • args (Array) String türünden argüman listesi
  • options (Object) aşağıdaki seçeneklerden bir veya daha fazlasını içerebilir.
    • cwd (String): Alt işlemin geçerli çalışma dizini.
    • env (Object): Anahtar-değer çifti.
    • execPath (String): Çalıştırılabilir alt işlemleri yaratmak için kullanılır.
    • execArgv (Array): Çalışır string türünden argüman listesini aktarma (Geçerli değer: process.execArgv)
    • silent (Boolean): Eğer true ise stdin, stdout, and stderr altları ebevenye yönlendirilir, aksi takdirde ebeveynden kalıtılacaktır. Daha fazla bilgi için spawn()’ın stdio’sunun “pipe” ve “inherit” seçeneklerini bakınız. (Geçerli değeri: false)
    • uid (Number): İşlemin kullanıcı kimliğini ayarlar
    • gid (Number): İşlemin grup kimliğini ayarlar.

Fork metodu, bir ChildProcess örneğinde tüm yöntemlere sahip olmanın yanı sıra yerleşik bir iletişim kanalına sahip bir nesneyi döndürür.

Örneğimizde yine yukarıdaki “destek.js” dosyasını kullanacağız. Ana.js dosyamız aşağıdaki gibi düzenlenmiştir.

Bu programın çıktısı: