Sobes.tech
Middle+

Node.js'te çoklu iş parçacığı nasıl uygulanır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Node.js doğası gereği, kullanıcı JavaScript kodunu çalıştırmak için tek iş parçacıklıdır. Çoklu görev, bloklamayan giriş/çıkış ve Event Loop sayesinde elde edilir. Ağır görevlerin çoklu iş parçacığıyla yürütülmesi, worker_threads modülü kullanılarak gerçekleştirilir.

Event Loop:

  • Asenkron işlemler için ana mekanizma.
  • Giriş/çıkış işlemleri, zamanlayıcılar ve diğer asenkron olaylarla ilişkili geri çağrıları işleyen tek iş parçacıklı döngü.

Worker Threads:

  • CPU-bound ağır görevleri paralel olarak yürütmeye olanak tanır.
  • Her işçi, kendi V8 JavaScript motorunu ayrı bir iş parçacığında başlatır.
  • Ana iş parçacığı ile işçiler arasındaki iletişim mesaj gönderimi (postMessage, receiveMessage) aracılığıyla gerçekleşir.

Karşılaştırma:

Mekanizma Amaç Paralelizm Durum izolasyonu Bellek kullanımı Karmaşıklık En uygun kullanım alanları
Event Loop Asenkron I/O Rekabet Paylaşılan durum Verimli Düşük I/O-bound görevler
Worker Threads CPU-bound hesaplamalar Paralelizm İzole edilmiş Daha yüksek CPU-bound görevler

worker_threads kullanımı örneği:

// main.js
const { Worker, isMainThread, parentPort } = require('worker_threads');

if (isMainThread) {
  // Bu ana iş parçacığı
  const worker = new Worker(__filename); // Aynı dosyayı kullanarak işçi oluştur

  worker.on('message', (msg) => {
    console.log(`İşçiden mesaj: ${msg}`);
  });

  worker.on('error', (err) => {
    console.error(err);
  });

  worker.on('exit', (code) => {
    if (code !== 0)
      console.error(`İşçi, kod ${code} ile sona erdi`);
  });

  worker.postMessage('Merhaba, işçi!'); // İşçiye mesaj gönder

} else {
  // Bu işçi iş parçacığı
  parentPort.on('message', (msg) => {
    console.log(`Ana iş parçacığından mesaj: ${msg}`);
    parentPort.postMessage('Merhaba, ana iş parçacığı!'); // Yanıt gönder
  });
}

Event Loop, Node.js ve libuv seviyesinde yönetilirken, worker_threads API'si, JavaScript kodunu yürütmek için iş parçacıklarını açıkça oluşturma ve yönetme imkanı sağlar.