Asenkron Yönetim
- p-limit:
p-limitkütüphanesi, belirli bir asenkron işlemin aynı anda kaç kez çalışabileceğini sınırlamak için kullanılır. Bu, asenkron işlemlerin eşzamanlılığını kontrol etmeye yardımcı olur. - async:
asynckütüphanesi, asenkron akışları yönetmek için bir dizi araç sunar. Paralel, seri ve sınırlı eşzamanlılık gibi farklı asenkron kontrol akışlarını destekler. - bluebird:
bluebirdkütüphanesi, Promise tabanlı asenkron yönetim sağlar. Yüksek performanslı Promise'ler, paralel işlemler ve gelişmiş hata yönetimi gibi özellikler sunar. - promise-queue:
promise-queuekütüphanesi, asenkron işlemleri bir kuyrukta sıraya alarak yönetir. Her seferinde yalnızca belirli sayıda işlemin gerçekleştirilmesini sağlar. - promise-limit:
promise-limitkütüphanesi, Promise'lerin eşzamanlılığını sınırlamak için basit bir API sunar. Bu, kaynak kullanımını yönetmek için etkilidir.
Hata Yönetimi
- p-limit:
p-limitkütüphanesi, hata yönetimi için özel bir mekanizma sağlamaz. Hatalar, asenkron fonksiyonlar içinde yönetilmelidir. - async:
asynckütüphanesi, hata yönetimi için callback tabanlı bir yaklaşım kullanır. Hatalar, geri çağırma fonksiyonlarına iletilir. - bluebird:
bluebirdkütüphanesi, Promise tabanlı hata yönetimi sağlar. Hatalar,catchmetoduyla yakalanabilir ve yönetilebilir. - promise-queue:
promise-queuekütüphanesi, hata yönetimi için bir mekanizma sağlamaz. Hatalar, kuyrukta sıraya alınan asenkron işlemler içinde yönetilmelidir. - promise-limit:
promise-limitkütüphanesi, hata yönetimi için basit bir yaklaşım sunar. Hatalar, Promise yapısı aracılığıyla iletilir.
Performans
- p-limit:
p-limitkütüphanesi, asenkron işlemlerin eşzamanlılığını sınırlayarak sistem kaynaklarını korur. Bu, aşırı yüklenmeyi önlemeye yardımcı olur. - async:
asynckütüphanesi, performans açısından verimlidir ancak karmaşık asenkron akışları yönetirken ek overhead oluşturabilir. - bluebird:
bluebirdkütüphanesi, yüksek performanslı Promise'ler sunar. Özellikle büyük ölçekli asenkron işlemler için optimize edilmiştir. - promise-queue:
promise-queuekütüphanesi, asenkron işlemleri bir kuyrukta sıraya alarak yönetir. Bu, işlemlerin daha düzenli ve kontrol edilebilir bir şekilde gerçekleştirilmesini sağlar. - promise-limit:
promise-limitkütüphanesi, Promise'lerin eşzamanlılığını sınırlayarak kaynak kullanımını yönetir. Basit bir API ile etkili bir şekilde çalışır.
Kullanım Senaryoları
- p-limit:
p-limitkütüphanesi, belirli bir asenkron işlemin eşzamanlılığını sınırlamak için kullanılır. Bu, API çağrıları veya veri tabanı işlemleri gibi senaryolar için yararlıdır. - async:
asynckütüphanesi, karmaşık asenkron akışları yönetmek için idealdir. Paralel ve seri işlemleri bir arada yönetmek için kullanılabilir. - bluebird:
bluebirdkütüphanesi, yüksek performans gerektiren asenkron işlemler için uygundur. Özellikle büyük veri setleri ile çalışırken avantaj sağlar. - promise-queue:
promise-queuekütüphanesi, asenkron işlemleri sırayla gerçekleştirmek için uygundur. Özellikle kaynakları sınırlı olan sistemlerde etkilidir. - promise-limit:
promise-limitkütüphanesi, basit ve hafif bir çözüm arayanlar için idealdir. Eşzamanlılık sınırlandırması gerektiren her türlü asenkron işlem için kullanılabilir.
Örnek Kod
- p-limit:
p-limitkütüphanesi ile eşzamanlılık sınırlandırmaconst pLimit = require('p-limit'); const limit = pLimit(2); // Aynı anda en fazla 2 işlem const işlemler = [ limit(() => new Promise((resolve) => setTimeout(() => resolve('İşlem 1'), 1000))), limit(() => new Promise((resolve) => setTimeout(() => resolve('İşlem 2'), 500))), limit(() => new Promise((resolve) => setTimeout(() => resolve('İşlem 3'), 2000))) ]; Promise.all(işlemler).then((sonuçlar) => { console.log('Sınırlı Eşzamanlı Sonuçlar:', sonuçlar); }); - async:
asynckütüphanesi ile asenkron işlemlerconst async = require('async'); // Paralel işlemler async.parallel([ (callback) => setTimeout(() => callback(null, 'İşlem 1'), 1000), (callback) => setTimeout(() => callback(null, 'İşlem 2'), 500) ], (err, sonuçlar) => { if (err) throw err; console.log('Paralel Sonuçlar:', sonuçlar); }); // Seri işlemler async.series([ (callback) => setTimeout(() => callback(null, 'İşlem 1'), 1000), (callback) => setTimeout(() => callback(null, 'İşlem 2'), 500) ], (err, sonuçlar) => { if (err) throw err; console.log('Seri Sonuçlar:', sonuçlar); }); // Sınırlı eşzamanlılık async.eachLimit([1, 2, 3], 2, (num, callback) => { setTimeout(() => { console.log('İşlem:', num); callback(); }, 1000); }, (err) => { if (err) throw err; console.log('Tüm işlemler tamamlandı.'); }); - bluebird:
bluebirdkütüphanesi ile Promise yönetimiconst Bluebird = require('bluebird'); // Yüksek performanslı Promise const promise1 = Bluebird.resolve('İlk Promise'); promise1.then((değer) => { console.log(değer); }); // Paralel işlemler const promise2 = Bluebird.all([ Bluebird.resolve('İşlem 1'), Bluebird.resolve('İşlem 2') ]); promise2.then((sonuçlar) => { console.log('Paralel Sonuçlar:', sonuçlar); }); // Hata yönetimi const promise3 = Bluebird.reject('Hata!'); promise3.catch((hata) => { console.error('Yakalanan Hata:', hata); }); - promise-queue:
promise-queuekütüphanesi ile kuyruk yönetimiconst PromiseQueue = require('promise-queue'); const kuyruk = new PromiseQueue(2, Infinity); // Aynı anda en fazla 2 işlem const işlemler = [ () => new Promise((resolve) => setTimeout(() => resolve('İşlem 1'), 1000)), () => new Promise((resolve) => setTimeout(() => resolve('İşlem 2'), 500)), () => new Promise((resolve) => setTimeout(() => resolve('İşlem 3'), 2000)) ]; const sonuçlar = işlemler.map((işlem) => kuyruk.add(işlem)); Promise.all(sonuçlar).then((değerler) => { console.log('Kuyruk Sonuçları:', değerler); }); - promise-limit:
promise-limitkütüphanesi ile basit eşzamanlılık sınırlandırmaconst promiseLimit = require('promise-limit'); const limit = promiseLimit(2); // Aynı anda en fazla 2 işlem const işlemler = [ limit(() => new Promise((resolve) => setTimeout(() => resolve('İşlem 1'), 1000))), limit(() => new Promise((resolve) => setTimeout(() => resolve('İşlem 2'), 500))), limit(() => new Promise((resolve) => setTimeout(() => resolve('İşlem 3'), 2000))) ]; Promise.all(işlemler).then((sonuçlar) => { console.log('Sınırlı Eşzamanlı Sonuçlar:', sonuçlar); });
