𝗡𝗼𝗱𝗲.𝗷𝘀 𝗘𝘃𝗲𝗻𝘁 𝗟𝗼𝗼𝗽 𝗔ç̧ı𝗸𝗹𝗮𝗻𝗱ı
Node.js tek bir thread kullanır. Aynı anda binlerce isteği nasıl yönettiğini merak ediyor olabilirsiniz.
Sır, Event Loop'ta saklıdır.
Bir görevin bitmesini beklemek yerine, Node.js zaman alan görevleri işletim sistemine gönderir. Bir sonraki göreve geçmeye devam eder. Bu, uygulamalarınızın hızlı ve duyarlı olmasını sağlar.
Blocking vs Non-blocking (Bloklayan ve Bloklamayan)
Eğer readFileSync gibi senkron fonksiyonlar kullanırsanız, sunucu durur. Dosyanın okunmasının bitmesini bekler. Başka hiçbir kullanıcı yanıt alamaz. Bu, performansınızı öldürür.
Eğer fs.readFile kullanırsanız, sunucu çalışmaya devam eder. Dosya arka planda okunurken diğer istekleri yönetir.
Event Loop nasıl çalışır?
Döngü birkaç aşamadan geçer:
• Timers: setTimeout ve setInterval işlemlerini yönetir.
• Pending Callbacks: Sistem düzeyindeki hataları yönetir.
• Poll: Yeni bağlantıları alır ve veritabanı sorguları gibi I/O işlemlerini yönetir.
• Check: setImmediate işlemlerini yönetir.
• Close Callbacks: Socket kapanmalarını yönetir.
Öncelik Sırası
Tüm görevler eşit değildir. Node.js iki kuyruk kullanır:
- Microtask Queue: Promise'leri tutar.
- Callback Queue:
setTimeoutve I/O işlemlerini tutar.
Microtask Queue her zaman önce çalışır. Eğer bir Promise ve bir setTimeout varsa, Promise zamanlayıcıdan önce tamamlanır.
Call Stack ve Kuyruklar
Call Stack, o anda hangi kodun çalıştığını takip eder. Bir görev bittiğinde, callback'i bir kuyruğa girer. Event Loop, kuyruktan görevleri çekmeden önce Call Stack'in boşalmasını bekler.
Bu hatalardan kaçının:
• Sonsuz döngüler kullanmayın. Bu, tüm uygulamanızı dondurur. • Production (canlı) ortamda senkron dosya yöntemlerini kullanmayın. • Ana thread üzerinde ağır matematiksel işlemler veya video işleme yapmayın.
Ağır görevler için Worker Threads veya arka plan işleri (background jobs) kullanın.
Özet
Node.js hızlıdır çünkü beklemez. I/O görevlerini devreder ve sonuçları yönetmek için Event Loop'u kullanır. Bu mimari, tek bir thread'in birçok kullanıcıya hizmet vermesine olanak tanır.
Event Loop'un öğrenmesi sizin için en zor olan kısmı hangisiydi? Yorumlarda bana bildirin.