Curiosity ve profesyonel büyümenin çerçevesinde geliştiriciler için tasarlanan bu temizlik, asinkron programlamanın uygulama performansını, ölçeklenebilirliğini ve yanıt verimliliğini nasıl artırabileceğini aydınlatmayı amaçlamaktadır.
AsyncIO, Node.js veya Go gibi belirli teknolojilerin ötesine geçiyoruz.
Bu araştırma, teknik jargonun karmaşıklığı olmadan modern yazılımı yönlendiren verimliliği kavramak isteyen yazılım geliştiricileri için tasarlanmıştır.
Bir tek iğne taleplerinin nasıl bir tek çizgi yolu gibi olduğunu düşünün: her isteğin bir araba olduğu ve tek bir çizgi olduğunda, arabalar bir araya gelerek gecikmeler yaratır. Ama şehrimiz – hizmetimiz – trafiği daha akıllı bir şekilde yönetebilseydi ne olurdu? Asynchronous runtime sihirinin ortaya çıktığı yer burası.
Bu sistem trafik akışını düzgün tutar, arabanın (veya görevin) çok uzun süre beklememesini sağlar, böylece asinkron çalışma süresi yazılımımızı verimli bir şekilde çalıştırır.
İç / dış işlemleri senkron olarak tamamlayan bir hizmet örneğini düşünelim. netlik için, bu işlemler grafikte ana yürütme akışının dışında gösterilir:
Hizmetinizin başlangıç aşamasında I/O'yu engellemek kabul edilebilir olabilir, ancak harici istekleri işlerken bu yaklaşımdan kaçınmak tavsiye edilir.Aşağıdaki grafik, hizmet verimliliğini engellemeyen I/O işlemlerinin uygulanmasıyla nasıl artırabileceğini gösterir:
Bu örnekler, sunucunun performans artışını en üst düzeye çıkarma senaryolarını vurgulamaktadır.Ancak, engelleme olmayan işlemlerin avantajı, gelen taleplerin herhangi bir sıklıkta devam etmektedir.En az ideal koşullarda bile, özel I/O thread'leri işleme iş akışına entegre etmekten performans avantajları elde edilir.
Bir isteğin işlenmesi için gereken toplam zaman (kullanıcının başlangıç isteğinden sağdaki mavi sayıda gösterildiği gibi nihai yanıtına kadar) her zaman azalacaktır, eğer tüm istekleri işlemek için yeterli iplikler vardır. en kötü senaryoda, bu süre senkron işleme yöntemlerinden daha uzun olmayacaktır.
Sonra birçok geliştirici için kontrintuitif görünebilecek bir uygulama ile karşılaşırız. I/O işlemleri talep işleme süresinin önemli bir kısmını oluşturduğunda, diğer kod segmentlerini optimize etmek hafif bir iyileştirme sağlayabilir.
Caching veya süreç içi bir veritabanı kullanmak, diğer işleme faaliyetlerine kıyasla veri alım süresini azaltabilir.
Kodun etkili bir şekilde bölünmesi ve geri çağrı yürütülmesini kolaylaştırmak için, çalıştırma süresini bir sonraki olay döngüsüne geçmek için yönlendirebilirsiniz.Aşağıda bu kavramın nasıl uygulandığını gösteren bir örnek var:
// callbacks işlevi func1_cb(str, cb) { var res = func1(str); cb(res); } function func2_cb(str, cb) { var res = func2(str); cb(res); } // non-blocking callbacks function func1_cb(str, cb) { var res = func1(str); } function func2_cb(str, cb) { var res = func2(str); } // process.nextick(function () { cb(res); } ; } // işlevi işlevi işlevi işlevi işlevi işlevi işlevi işlevi işlevi işlevi işlevi işlevi işlevi işlevi işlevi işlevi işlevi işlevi işlevi iş// blocking callbacks
function func1_cb(str, cb) {
var res = func1(str);
cb(res);
}
function func2_cb(str, cb) {
var res = func2(str);
cb(res);
}
// non-blocking callbacks
function func1_cb(str, cb) {
var res = func1(str);
process.nextTick(function () {
cb(res);
});
}
function func2_cb(str, cb) {
var res = func2(str);
process.nextTick(function () {
cb(res);
});
}
// usage example
func1_cb(content, function (str) {
func2_cb(str, function (result) {
// work with result
});
});
Bu metodolojiyi hesaplamaların iki bölümünü bölmek için kullanarak, hemen hemen eşzamanlı isteğe varan senaryolar için genel işleme süresi aynı kalır.
Bu senaryo, “next tick” stratejisini kullanırken en az olumlu sonucu temsil eder. İlk örnekte gösterildiği gibi, “next tick” yöntemi nadir taleplere karşı iyimserlik gösterir. istekleri orta hızda ulaşırsa, bu tekniği kullanarak yeni istekleri başlatma ve engelleyici olmayan işlemlerin başlatılması, yürütme kesintileri sırasında aralıksız bırakılmasını sağlayan işleme hızını artırır.
Son olarak, engelleme olmayan I/O'yu kullanmak, uygulamaların performansını arttırmak için çok önemlidir ve hem az hem de ağır gelen taleplerin hacmi olan ortamlarda faydalıdır. ek olarak, "next tick" teknikine benzer kavramlarla gösterilen etkin bir şekilde gerçekleştirme akışını sıralamak, sunucu verimliliğini önemli ölçüde iyileştirir.