Yükleniyor...

Olay Döngüsü

Node.js’de Olay Döngüsü (Event Loop), tek iş parçacıklı bir yapıda asenkron işlemleri yönetmeyi sağlayan temel bir mekanizmadır. Bu döngü sayesinde, I/O işlemleri, zamanlayıcılar, ağ istekleri ve diğer asenkron görevler bloklanmadan çalıştırılır. Olay Döngüsü, Node.js’in yüksek performanslı ve ölçeklenebilir uygulamalar geliştirmede kritik bir rol oynar.
Olay Döngüsü, özellikle uzun süren veya bloklayıcı işlemler sırasında kullanılır. Örneğin, dosya okuma/yazma, veri tabanı sorguları veya harici API çağrıları sırasında, döngü diğer görevlerin çalışmasına devam eder ve uygulamanın yanıt verme süresini optimize eder. Node.js’in temel kavramları arasında sözdizimi, veri yapıları, algoritmalar ve nesne yönelimli programlama (OOP) prensipleri bulunur. Bu kavramlar, Olay Döngüsü’nün nasıl çalıştığını ve mikro/görev işleme (Microtasks/Macrotasks) mantığını anlamak için gereklidir.
Bu eğitim sonunda okuyucular, Olay Döngüsü’nü gerçek projelerde etkin şekilde kullanabilecek, bellek sızıntıları ve hatalı hata yönetimi gibi yaygın sorunlardan kaçınabilecek ve yazılım mimarisinde modüler, sürdürülebilir ve performanslı çözümler geliştirebileceklerdir. Ayrıca, Node.js sistemlerinde Olay Döngüsü’nü optimize ederek daha iyi ölçeklenebilirlik ve verimlilik sağlama stratejileri öğrenilecektir.

Temel Örnek

text
TEXT Code
const EventEmitter = require('events');
class BenimEmiterim extends EventEmitter {}

const emiter = new BenimEmiter();

// Listener kaydetme
emiter.on('selam', (isim) => {
console.log(`Merhaba, ${isim}!`);
});

// Olayı tetikleme
emiter.emit('selam', 'Ahmet');

console.log('Olay tetiklendi');

Bu örnekte, BenimEmiter sınıfı EventEmitter’dan türetilmiştir. on metodu ile 'selam' olayı için bir listener kaydedilir, emit metodu ile bu olay tetiklenir ve callback çalıştırılır.
emiter.emit('selam', 'Ahmet') çalıştırıldığında konsolda "Merhaba, Ahmet!" yazdırılır. console.log('Olay tetiklendi') satırı ise hemen emit çağrısından sonra çalışır. Bu, Olay Döngüsü’nün non-blocking (engellemeyen) yapısını gösterir. Ayrıca örnek, Node.js’in sözdizimi ve isimlendirme konvansiyonlarına uygun olarak hazırlanmıştır.

Pratik Örnek

text
TEXT Code
const EventEmitter = require('events');

class GorevKuyrugu extends EventEmitter {
constructor() {
super();
this.gorevler = [];
}

gorevEkle(gorev) {
this.gorevler.push(gorev);
this.emit('gorevEklendi');
}

gorevleriIsle() {
this.on('gorevEklendi', () => {
while (this.gorevler.length > 0) {
const mevcutGorev = this.gorevler.shift();
try {
mevcutGorev();
} catch (err) {
console.error('Görev yürütülürken hata oluştu:', err);
}
}
});
}

}

const kuyruk = new GorevKuyrugu();
kuyruk.gorevleriIsle();

kuyruk.gorevEkle(() => console.log('Görev 1 tamamlandı'));
kuyruk.gorevEkle(() => console.log('Görev 2 tamamlandı'));

Bu örnek, Olay Döngüsü ile çalışan bir FIFO kuyruk yapısı gösterir. gorevEkle metodunda yeni görev eklendiğinde 'gorevEklendi' olayı tetiklenir ve gorevleriIsle metodu ile görevler sırayla çalıştırılır.
try/catch bloğu, bir görevde hata oluşsa bile diğer görevlerin çalışmasını sağlar. Bu model, HTTP istekleri, arka plan görevleri veya toplu veri işlemleri için kullanılabilir. OOP ve Event Loop kombinasyonu, Node.js projelerinde modüler, ölçeklenebilir ve bakımı kolay yapılar oluşturur.

Olay Döngüsü kullanımında en iyi uygulamalar, gereksiz listener’ların kaldırılması, callback’lerin doğru yönetimi ve veri yapılarının verimli kullanımıdır. Yaygın hatalar; Event Loop’u bloklayan işlemler, hatalı hata yönetimi ve listener aşırı yüklemesidir.
Hata ayıklama için process.nextTick, setImmediate ve Node.js Debugger önerilir. Performans optimizasyonu için Worker Threads veya Child Processes kullanılabilir. Güvenlik açısından giriş verilerinin doğrulanması ve kuyruk büyüklüğünün kontrol edilmesi, hizmetin sürdürülebilirliği için önemlidir.

📊 Referans Tablosu

Node.js Element/Concept Description Usage Example
EventEmitter Olay yönetimi için temel sınıf const emiter = new EventEmitter(); emiter.on('olay', () => {});
.emit Olayı tetikleyip listener’ları çalıştırır emiter.emit('olay');
.on Olay için listener kaydeder emiter.on('olay', callback);
process.nextTick Mevcut döngü sonunda fonksiyon çalıştırır process.nextTick(() => console.log('Mikro görev'));
setImmediate Bir sonraki döngüde fonksiyon çalıştırır setImmediate(() => console.log('Sonraki döngü'));
Array Queue Görevleri yönetmek için veri yapısı gorevler.push(gorev); gorevler.shift();

Olay Döngüsü’nü anlamak, asenkron işlemleri, olayları ve hataları verimli yönetmeyi sağlar. Bir sonraki adımlar arasında Promises, async/await, Streams ve Worker Threads konuları yer alır. Bu konular, gerçek verilerle ve API’lerle çalışmak için önemlidir. Node.js resmi dokümantasyonu ve optimizasyon rehberleri, ileri seviye uygulamalar geliştirmek için kaynak sağlar.

🧠 Bilginizi Test Edin

Başlamaya Hazır

Bilginizi Test Edin

Bu interaktif sınavla kendini test et ve konuyu ne kadar iyi anladığını gör

4
Sorular
🎯
70%
Geçmek İçin
♾️
Süre
🔄
Deneme

📝 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