Yükleniyor...

Asenkron Programlama

Node.js’de asenkron programlama, uygulamaların hızlı, ölçeklenebilir ve verimli bir şekilde çalışmasını sağlayan temel bir yaklaşımdır. Node.js tek iş parçacıklı (single-threaded) bir yapıya sahiptir ve olay döngüsü (event loop) ile birden fazla işlemi aynı anda, engellemeden yürütebilir. Bu sayede dosya okuma, veritabanı sorguları veya HTTP istekleri gibi G/Ç işlemleri, diğer işlemlerin çalışmasını durdurmadan gerçekleştirilebilir.
Asenkron programlama, özellikle yüksek trafikli sunucular, mikroservisler ve gerçek zamanlı uygulamalar geliştirirken kritik bir öneme sahiptir. Callback, Promises ve async/await gibi yöntemler, geliştiricilere eşzamanlı işlemleri kontrol etme ve “callback hell” gibi yaygın sorunları önleme imkânı sağlar.
Bu eğitimde, Node.js’de asenkron programlamanın temel prensiplerinden başlayarak, hata yönetimi, performans optimizasyonu ve OOP prensipleriyle entegrasyonu gibi ileri düzey konulara kadar detaylı örnekler sunulacaktır. Ayrıca asenkron programlamanın yazılım mimarisi ve sistem tasarımındaki yeri de ele alınacaktır. Bu içerik, geliştiricilere hem uygulama performansını artırma hem de okunabilir, sürdürülebilir kod yazma becerisi kazandırmayı hedeflemektedir.

Temel Örnek

text
TEXT Code
// Dosya okuma işlemini async/await ile gerçekleştiren basit örnek
const fs = require('fs').promises;

async function dosyaOku(ruta) {
try {
const icerik = await fs.readFile(ruta, 'utf8');
console.log('Dosya içeriği:', icerik);
} catch (hata) {
console.error('Dosya okuma hatası:', hata.message);
}
}

async function main() {
console.log('Dosya okuma işlemi başlıyor...');
await dosyaOku('./ornek.txt');
console.log('Dosya okuma tamamlandı.');
}

main();

Bu örnek, Node.js’de async/await kullanımını ve Promises ile modern asenkron kod yazımını göstermektedir. dosyaOku fonksiyonu async olarak tanımlanmıştır ve fs.readFile işlemini beklerken event loop engellenmez. Böylece diğer işlemler aynı anda çalışabilir.
fs.promises modülü, callback yerine Promises döndürür ve bu sayede kodun okunabilirliği artar ve callback hell önlenir. try...catch bloğu ise hata yönetimini sağlar ve dosya okuma sırasında oluşabilecek hataların kontrolsüz bir şekilde süreci durdurmasını engeller.
main fonksiyonu, dosya okuma sürecini başlatır ve işlem tamamlandıktan sonra log verir. Bu yapı, Node.js projelerinde dosya işlemleri veya ağ istekleri gibi asenkron görevlerin yönetiminde temel bir kalıp olarak kullanılabilir. Async/await kombinasyonu, okunabilirliği artırırken aynı zamanda hata yönetimi ve kontrolün daha sağlam olmasını sağlar.

Pratik Örnek

text
TEXT Code
// Birden fazla dosyayı eşzamanlı olarak okuyup işlem yapan örnek
const fs = require('fs').promises;

class AsenkronIslem {
constructor(dosyalar) {
this.dosyalar = dosyalar;
}

async dosyalariIsle() {
try {
const gorevler = this.dosyalar.map(async (dosya) => {
const icerik = await fs.readFile(dosya, 'utf8');
console.log(`${dosya} başarıyla okundu.`);
return icerik.toUpperCase();
});

const sonuclar = await Promise.all(gorevler);
console.log('İşlenen sonuçlar:', sonuclar);
return sonuclar;
} catch (hata) {
console.error('Dosya işleme hatası:', hata.message);
}

}
}

(async () => {
const islem = new AsenkronIslem(['./a.txt', './b.txt', './c.txt']);
await islem.dosyalarıIsle();
})();

Node.js’de asenkron programlama için en iyi uygulamalar, kodun okunabilir, verimli ve güvenli olmasını hedefler. Async/await ve Promises kullanımı, callback hell’i önler ve hata yönetimini kolaylaştırır. Birden fazla bağımsız işlemi aynı anda çalıştırmak için Promise.all kullanımı, performansı artırır.
Yaygın hatalar arasında, kaynakların serbest bırakılmaması nedeniyle oluşan bellek sızıntıları ve hataların yetersiz yönetimi bulunur. Bu riskleri azaltmak için try...catch blokları ve process.on('unhandledRejection') gibi global yakalama yöntemleri kullanılmalıdır.
Performans optimizasyonu açısından, event loop’u engelleyen senkron işlemlerden kaçınılmalı ve algoritmalar mümkün olduğunca verimli tasarlanmalıdır. Güvenlik için, asenkron işlemlerde veri doğrulama, sanitizasyon ve şifreleme uygulamak önemlidir. Doğru uygulandığında asenkron programlama, sistemlerin hem hızlı hem de güvenilir çalışmasını sağlar.

📊 Referans Tablosu

Node.js Element/Concept Description Usage Example
Callback Asenkron işlem tamamlandığında çağrılan fonksiyon fs.readFile('dosya.txt', (err, data) => { if (err) throw err; console.log(data); });
Promise Asenkron işlemin gelecekteki sonucunu temsil eder fs.promises.readFile('dosya.txt').then(console.log).catch(console.error);
Async/Await Promiselerin okunabilir şekilde yönetimi async function f(){ const data = await fs.promises.readFile('dosya.txt', 'utf8'); }
Event Loop Node.js’de asenkron işlemleri yöneten mekanizma Node.js, event loop ile işlemleri engellemeden yürütür
Promise.all Birden fazla promiseyi paralel çalıştırır await Promise.all([gorev1(), gorev2(), gorev3()]);
Error Handling Asenkron hataların yönetimi try { await gorevAsync(); } catch (err) { console.error(err); }

Asenkron programlama, Node.js geliştirme sürecinde kritik bir beceridir. Event loop, Promises ve async/await gibi kavramlar öğrenildiğinde, geliştiriciler yüksek performanslı, ölçeklenebilir ve güvenilir uygulamalar oluşturabilirler.
Bu temel bilgilerin ardından, Streams, Worker Threads ve özel event yönetimi gibi ileri konulara geçmek, paralel işlem kapasitesini artırır ve sistem yükünü optimize eder. Asenkron programlama doğru uygulandığında RESTful API’ler, mikroservisler ve olay odaklı mimarilerde etkin bir şekilde kullanılabilir.
Önerilen öğrenme kaynakları arasında Node.js Profiler, PM2 ve Chrome DevTools ile gelişmiş hata ayıklama yer alır. Asenkron akışı anlamak, daha güvenli ve performanslı üretim sistemleri geliştirmeyi mümkün kı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