Yapay zekadan makale özeti
- Kısa
- Ayrıntılı
- Bu video, bir eğitim içeriği olup, konuşmacı ASP.NET Core'da asenkron ve senkron işlemlerin nasıl kullanılacağını anlatmaktadır.
- Video, server tarafında asenkron ve senkron kullanımların karşılaştırmalı olarak ele alınmasını içermektedir. Konuşmacı, threadpool mekanizması, task ve async/await kullanımı gibi konuları kod örnekleriyle açıklamakta, ayrıca 32.000 tane trenin bulunduğu bir uygulamada farklı istek sayılarında (10, 13, 24, 37, 1000) her iki işlem türünün performansını test etmektedir.
- Videoda, senkron kullanımda bir threadpool içindeki threadlerin sadece bir isteği işleyebildiği, asenkron kullanımda ise birden fazla isteği işleyebildiği gösterilmektedir. Ayrıca, threadpool'daki thread sayısını nasıl ayarlayabileceğimizi ve bu ayarların performansa etkisini örneklerle açıklamaktadır.
- 00:07Asenkron ve Senkron Kullanımları
- Video, C# ve .NET içerisinde gelen Task ve async kullanımlarının server tarafında nasıl ele alındığını anlatacak.
- Önceki videoda desktop application ve Windows Phone uygulaması kullanılarak bu kullanımların nasıl kullanılacağı gösterilmişti.
- Bu videoda ise asenkron kullanımların server tarafında nasıl ele alınacağı ve .NET'in sunmuş olduğu threadpool mekanizması işlenecek.
- 01:44Proje Oluşturma
- C# içerisinde bir ASP.NET Core Web API ve bir konsol uygulaması oluşturulacak.
- Web API için "club task web app" adı, konsol uygulaması için "web task console app" adı verilecek.
- Her iki proje de .NET 5 için oluşturulacak.
- 02:52Web API Controller Oluşturma
- Web API için iki controller oluşturulacak: TestController ve TestController.
- TestController'da hem senkron hem asenkron bir GET metodu (GetSync ve GetAsync) tanımlanacak.
- GetSync metodu Thread.Sleep() ile bir saniye bekleyecek, GetAsync metodu ise Task.Delay() ile asenkron olarak bekleyecek.
- 04:46Konsol Uygulaması Kodlama
- Konsol uygulamasında kullanıcıdan sync veya async isteği ve kaç tane request yapmak istediğini soracak.
- Kullanıcıdan alınan verilere göre Web API'ye istekler yapılacak ve sonuçlar ekrana basılacak.
- Konsol uygulamasında işlemler asenkron olarak yapılacak, böylece client tarafının server tarafından gelen sonuçlara etkisi olmayacak.
- 07:36Web API Client Oluşturma
- Konsol uygulamasında Web API'ye istekler yapacak bir client oluşturulacak.
- Client, hem sync hem asenkron istekleri gerçekleştirecek.
- Konsol uygulamasında StopWatch kullanılarak işlemlerin süresi ölçülecek ve ekrana basılacak.
- 12:13Threadpool Kavramı ve Çalışma Prensibi
- Web uygulamasında bulunan threadpool, çağrı merkezindeki telefon gibi düşünülebilir; dışarıdan gelen çağrıları ilk karşılayan nokta olarak görev yapar.
- Senkron yapıda, threadpool içindeki threadler dışarıdan gelen istekleri kabul eder ve işlem bitene kadar meşgul kalır, bu nedenle başka çağrıları alamazlar.
- Asenkron yapıda ise, threadpool içindeki threadler dışarıdan gelen istekleri kabul eder, sonucu gönderir ve başka çağrıları alabilirler.
- 15:47Senkron ve Asenkron Kullanım Karşılaştırması
- Threadpool'daki thread sayısı arttıkça aynı anda karşılanabilecek çağrı sayısı da artar, ancak thread sayısını artırmak CPU ve memory'e ekstra yük oluşturur.
- Asenkron kullanmak, thread sayısını artırmak yerine daha verimli bir çözüm sunar çünkü threadler meşgulken bile başka çağrıları alabilirler.
- Web projelerinde asenkron kullanmak, çağrıların beklemelerini azaltır ve performansı artırır.
- 17:00Threadpool Testi ve Yapılandırma
- Test uygulamasında senkron ve asenkron istekler gönderilerek threadpool'un performansı test edilir.
- Senkron isteklerde, threadpool içindeki threadler her istek için ayrı ayrı çalışır ve işlem bitene kadar meşgul kalır.
- Asenkron isteklerde, threadpool içindeki threadler bir isteği kabul edip sonucunu gönderir ve başka bir isteği alabilirler.
- 19:11Threadpool Yapılandırma Ayarları
- Threadpool sınıfındaki GetAvailableThreads metodu, threadpool'daki aktif thread sayısını gösterir.
- Threadpool'daki worker thread sayısı, fiziksel olarak kaç tane thread olacağını belirler ve bu değer bilgisayarın işlemcisindeki çekirdek sayısından küçük olamaz.
- Threadpool'daki maksimum thread sayısı, uygulamanın ayarlarına göre değiştirilebilir.
- 22:27Senkron ve Asenkron Testler
- Uygulama 32.000 tane trenle test edildiğinde, 100 istekte 1 saniye içinde tamamlandı çünkü her thread en fazla 1 saniye bekliyordu.
- Asenkron kullanımda da 100 istekte 1 saniye kadar sürdü çünkü en az bir tanesi 1 saniye bekliyordu.
- 32.000 istekte senkron kullanımda problem çıkmıyor.
- 23:19Thread Sayısı Ayarı
- Startup'taki ayarlar aktifleştirilerek proses count'u 12 olarak set edildi.
- 12 thread gücü olduğunda, 12 istek gönderildiğinde 1,30 saniyede cevap döndü.
- Asenkron kullanımda da 12 istek gönderildiğinde 1,30 saniyede cevap döndü.
- 24:35Thread Sayısı ve Performans
- 12 thread'den fazla istek gönderildiğinde, ilk 12 thread 1 saniye bekleyip geri dönerken, 13. istek için havuzdaki boş thread kullanılır.
- 13 istek gönderildiğinde, ilk 12 thread 1 saniye bekleyip geri dönerken, 13. istek için havuzdaki boş thread kullanılır ve toplamda 2 saniye kadar sürdü.
- 24 istek gönderildiğinde de 2 saniye civarında sürdü, 25 istek gönderildiğinde ise 3 saniye civarında sürdü.
- 30:24Asenkron ve Senkron Karşılaştırması
- Asenkron tarafta 13 istek gönderildiğinde 1,30 saniyede cevap döndü, 25 istek gönderildiğinde de 1,30 saniyede cevap döndü.
- Asenkron tarafta threadlerin boşa çıkmış olmasını beklemiyoruz çünkü istek alıp götürüp arka planda tamamlanmasını beklerken meşgul değil.
- 1000 istek aynı anda asenkron olarak gönderildiğinde 4 saniyede tamamlandı, senkron tarafta ise 37 istek için 4,5 saniye bekleniyordu.
- 33:05Sonuç ve Öneriler
- Server tarafında sync ve asenkron kullanmanın önemi bu kadar büyük, alınan işlemin threadpool tarafından nasıl yönlendirildiğini bilmek hayat kazandırabilir.
- Threadpool sayısını artırmak (32.000, 100.000, 1 milyon) ve aynı anda bir milyon thread çalıştırmanın avantajları videonun açıklamalar kısmında anlatılmıştır.