Süreç Yönetimi
Node.js’de Süreç Yönetimi, uygulamanın ana iş parçacığını engellemeden sistem üzerinde yeni süreçler başlatma, izleme ve yönetme yeteneğini ifade eder. Node.js tek iş parçacıklı bir event-loop yapısına sahip olmasına rağmen, CPU yoğun görevler veya harici komutların çalıştırılması gerektiğinde süreç yönetimi kritik bir rol oynar. Doğru süreç yönetimi, uygulamanın performansını artırır, bellek sızıntılarını önler ve hataların etkin şekilde ele alınmasını sağlar.
Süreç yönetimi, özellikle arka planda çalışan görevler, paralel veri işleme veya sistem komutlarının çalıştırılması gerektiğinde kullanılır. Node.js’de bunu gerçekleştirirken önemli olan kavramlar; doğru sözdizimi kullanımı, veri yapıları, algoritmalar ve nesne yönelimli programlama (OOP) prensipleridir. Bu içerikte okuyucu, süreçlerin nasıl başlatılacağını, çıktıların ve hataların nasıl yönetileceğini, süreçlerin etkin şekilde nasıl sonlandırılacağını ve kaynakların nasıl optimize edileceğini öğrenir.
Yazılım geliştirme ve sistem mimarisi bağlamında, Süreç Yönetimi sayesinde ölçeklenebilir, dayanıklı ve yüksek performanslı uygulamalar geliştirmek mümkündür. Sunulan örnekler gerçek dünya senaryolarına uygun olarak hazırlanmış olup Node.js’in event-driven mimarisini ve asenkron işlem yapısını kullanarak süreçlerin güvenli ve verimli bir şekilde yönetilmesini gösterir.
Temel Örnek
textconst { spawn } = require('child_process');
// Bir sistem komutunu çalıştırmak için yeni süreç oluştur
const süreç = spawn('ls', ['-la']);
süreç.stdout.on('data', (data) => {
console.log(`Çıktı: ${data}`);
});
süreç.stderr.on('data', (data) => {
console.error(`Hata: ${data}`);
});
süreç.on('close', (code) => {
console.log(`Süreç kodu: ${code}`);
});
Bu temel örnek, Node.js’in child_process modülü ve spawn fonksiyonu ile süreç yönetimini göstermektedir. Spawn, 'ls -la' komutunu çalıştıran yeni bir süreç başlatır ve ana iş parçacığını engellemez. stdout.on('data') sürecin standart çıktısını, stderr.on('data') hata çıktısını yakalar. close olayı, süreç tamamlandığında tetiklenir ve çıkış kodunu döner.
Bu kod, Node.js’in event-driven ve stream tabanlı mimarisini kullanarak bellek sızıntılarını önler ve asenkron hataların yönetimini sağlar. Ayrıca süreç yönetimi konusunda iyi bir temel oluşturur ve gerçek dünya uygulamalarında performans ile stabilite sağlar.
Pratik Örnek
textclass SüreçYönetici {
constructor() {
this.süreçler = [];
}
süreçBaşlat(komut, args = []) {
const { spawn } = require('child_process');
const proc = spawn(komut, args);
proc.stdout.on('data', (data) => {
console.log(`[${komut}] Çıktı: ${data}`);
});
proc.stderr.on('data', (data) => {
console.error(`[${komut}] Hata: ${data}`);
});
proc.on('close', (code) => {
console.log(`[${komut}] Süreç tamamlandı, kod: ${code}`);
this.süreçler = this.süreçler.filter(p => p !== proc);
});
this.süreçler.push(proc);
return proc;
}
tümSüreçleriSonlandır() {
this.süreçler.forEach(proc => proc.kill());
this.süreçler = [];
}
}
// Birden fazla süreç yönetimi
const yönetici = new SüreçYönetici();
yönetici.süreçBaşlat('ls', ['-la']);
yönetici.süreçBaşlat('node', ['-v']);
// 5 saniye sonra tüm süreçleri sonlandır
setTimeout(() => {
yönetici.tümSüreçleriSonlandır();
console.log('Tüm süreçler sonlandırıldı.');
}, 5000);
Bu ileri seviye örnek, SüreçYönetici sınıfı aracılığıyla birden fazla süreç yönetimini göstermektedir. süreçler dizisi aktif süreçleri takip eder. süreçBaşlat metodu spawn ile yeni süreç oluşturur, stdout, stderr ve close olaylarını yönetir ve süreçleri diziye ekler. tümSüreçleriSonlandır metodu tüm süreçleri kapatır ve kaynakları temizler.
Bu yapı OOP prensiplerini uygular ve süreç yönetimini modüler, yeniden kullanılabilir hale getirir. Node.js’in event-driven ve stream tabanlı yapısı ile birleştiğinde paralel veri işleme ve yüksek performanslı uygulama geliştirmeyi mümkün kılar.
Node.js’de süreç yönetimi için en iyi uygulamalar arasında spawn kullanımı, stdout, stderr ve close olaylarının etkin yönetimi ve pasif süreçlerin sonlandırılması yer alır. Optimizasyon için stream kullanımı ve CPU yoğun işlemlerin ayrı süreçlerde çalıştırılması tavsiye edilir.
Yaygın hatalar arasında hataları göz ardı etmek, ağır görevleri ana iş parçacığında çalıştırmak ve süreçleri açık bırakmak bulunur. Hata ayıklamada çıktıların loglanması ve izleme araçları kullanımı önerilir. Güvenlik açısından, dış komutlar çalıştırılırken girişlerin doğrulanması önemlidir.
📊 Referans Tablosu
Node.js Element/Concept | Description | Usage Example |
---|---|---|
spawn | Yeni, non-blocking süreç oluşturur | const proc = spawn('ls', ['-la']); |
stdout.on('data') | Sürecin standart çıktısını yakalar | proc.stdout.on('data', data => console.log(data)); |
stderr.on('data') | Sürecin hata çıktısını yakalar | proc.stderr.on('data', data => console.error(data)); |
close event | Süreç tamamlandığında tetiklenir | proc.on('close', code => console.log(code)); |
kill | Süreci sonlandırır | proc.kill(); |
Süreç Yönetimi Node.js’de paralel görevleri yürütmek, performansı artırmak ve kaynakları etkin şekilde kullanmak için kritik bir yetenektir. spawn, event-driven mimari, stream kullanımı ve OOP prensipleri, sağlam ve ölçeklenebilir sistemler oluşturmayı sağlar. İleri seviye konular olarak Cluster modülü, Worker Threads, performans optimizasyonları ve PM2 gibi süreç yönetim araçları incelenebilir. Pratik uygulamalar ve resmi dökümantasyon takibi öğrenmeyi pekiştirir.
🧠 Bilginizi Test Edin
Bilginizi Test Edin
Bu interaktif sınavla kendini test et ve konuyu ne kadar iyi anladığını gör
📝 Talimatlar
- Her soruyu dikkatle okuyun
- Her soru için en iyi cevabı seçin
- Quiz'i istediğiniz kadar tekrar alabilirsiniz
- İlerlemeniz üstte gösterilecek