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.