Evet arkadaşlar, şimdi asenkron ve multithreading programlama arasındaki farkı anlamaya çalışalım.
Eğer internette gezinirseniz ve Google'da asenkron ve multithreading ebeveyn programlama arasındaki
fark nedir diye bir arama yaparsanız, birçok makale ile karşılaşırsınız.
Dolayısıyla, asenkron programlamanın multithreading programlama ile aynı olup olmadığı ve eğer
değilse, o zaman hangi açıdan farklı oldukları çok yaygın bir
kafa karışıklığıdır. Öncelikle, asenkron ve multithreading programlama aynı gibi görünse
de aslında aynı değildir, multitasking asenkron programlamanın bir şeklidir, bu
yüzden sağ taraftaki diyagramda görebilirsiniz, asenkron programlama aslında daha büyük
bir kelimedir ve multitasking programlama asenkron programlamanın sadece bir parçasıdır.
Tamam.
Dolayısıyla, çok iş parçacıklı bir program yazdığınız
anda, eşzamansız programlama da yazdığınız doğrudur.
Ancak burada şaşırtıcı olan, tek iş parçacıklı bir programın da eşzamansız bir program olabileceğidir.
Ve bu kursta yapacağımız şey de bu.
Tek iş parçacıklı bir asenkron program yazacağız, böylece asenkron programlama tek bir
iş parçacığı ile yapılabileceği gibi birden fazla iş parçacığı ile de yapılabilir.
Bu konuda herhangi bir sınırlama bulunmamaktadır.
Multithreading tamamen işin başlatılmasıyla ilgilidir.
İş parçacıklarına paralel olarak gerçekleştirmeleri için bazı Frauke'ler atanır.
Tamam.
Umarım çoklu iş parçacığının tam olarak ne olduğunu anlamışsınızdır ve çoklu iş parçacığı, paralel olarak
gerçekleştirilecek bir iş yığınını atayan iş akışı iş parçacıkları olarak adlandırılan bazı iş parçacıklarına sahiptir.
Bu asenkron programlama değildir.
Her şey görevle ilgili.
Görev, yapılması gereken bir parça veya iş anlamına gelir.
Tamam.
Herhangi bir zamanda bir uygulama, işlenmek üzere bir kuyrukta bir dizi ağ paketine sahip olabilir.
Örneğin, bir uygulamanız var ve bu uygulama soket üzerinde bazı
ağ paketleri aldı ve bu ağ paketleri bir kuyruğa sıralandı.
Ancak bu ağ paketleri henüz uygulama tarafından işlenmemiştir.
Yani bir bakıma, uygulamanın yerine getirmesi gereken bir görevi vardır ve bu görev,
bir kuyruğa sıralanmış olan bu on ağ paketini işlemekten başka bir şey değildir.
Benzer şekilde, bir uygulama zamanlayıcı geri arama işlevini işlemek için bekleyen bir göreve sahip olabilir.
Bir zamanlayıcı geri çağrısı hiçbir şey değildir, ancak bir zamanlayıcı tarafından çağrılan bir işlevdir.
Tamam.
Dolayısıyla, bir uygulamanın bunları gerçekleştirmek için daha bekleyen bir görevi olabilir,
bir uygulamanın kendisinin bir ağ paketi ürettiği ve uygulamanın bu ağ
paketini uzaktaki bir makineye göndermesi gereken başka bir görevi olabilir.
Yani bir bakıma, uygulamanın yapması gereken bekleyen bir işi var.
Ve son olarak, bir son kullanıcı olarak bazı Clia'ları almanız
gerekebilir veya G-A-Y kullanarak uygulama ile etkileşime girmeye çalışıyorsunuz
ve uygulama işlemek için kullanıcıdan bir istek göndermiş olabilir.
Yani bu artık daha önce yapılması gereken bir görev.
Dolayısıyla, herhangi bir zamanda bir uygulamanın gerçekleştirmesi
gereken çok sayıda görevle bombardımana tutulabileceğini görebilirsiniz.
Şimdi şu soru ortaya çıkıyor: Uygulama
harcama görevini nasıl tamamlayacak? Pekala.
Ve hangi sırayla? Ve uygulama bu görevi paralel
izler başlatarak paralel olarak mı yürütecek yoksa uygulama
bu görevi sırayla mı gerçekleştirecek? Ve mevcut görev
yürütülürken, başka görevler de gelip devreye girebilir.
Tamam.
Bir işi birbirinden bağımsız görevlere bölen ve daha sonra bu görevleri
belirli bir sırayla yürüten programlar geliştirdiğimiz asenkron programlama dünyasına hoş geldiniz.
Bu yüzden hepimiz bu derste, uygulamanızın mantığı bağımsız görevlere
bölerek ve ardından her bir görevi bağımsız olarak yürüterek
iç mantığını çalıştırabileceği bir kütüphane, mini bir kütüphane geliştireceğiz.
Yani şimdi ileriye doğru.
Peki asenkron tek iş parçacıklı uygulama nedir?
Adından da anlaşılacağı gibi, tek iş parçacıklıdır.
Bu, uygulamanın bir iş parçacığına sahip olduğu ve eşzamanlı olduğu anlamına gelir, yani bir
D1 görevi gerçekleştirilir ve bir sonraki görev yalnızca önceki görev tamamen yürütüldüğünde tetiklenir.
Dolayısıyla, bunun eşzamanlı, tek iş parçacıklı bir uygulama modelini temsil ettiğini görebilirsiniz.
Her görev yalnızca bir önceki görev tamamen bittiğinde gerçekleştirilir ve
görevi birbiri ardına yürüten tek bir iş parçacığı vardır.
Tamam.
Ardından senkronize çok iş parçacıklı model olarak adlandırılan ikinci modele gelin.
Uygulamanızı bu modeli kullanarak tasarlarsanız, uygulamanızın birden
fazla tehdit başlatmak zorunda kalacağını görürsünüz.
Tamam.
Ve her etiket, gerçekleştirilecek tam olarak bir görevle ilişkilendirilir.
Yani Tehdit üç, üç numaralı görevi yerine getiriyor.
Stratfor dört numaralı görevi paralel olarak yürütüyor.
Dolayısıyla, her tehdit tam olarak bir görevle ilişkilendirildiği için eşzamanlıdır ve uygulamanız birden fazla
görevi paralel olarak yürütmek için birden fazla iş parçacığını kaybettiği için çok iş parçacıklıdır.
Daha sonra üçüncü tasarıma gelecek olursak, Austin tek iş parçacıklı bir
program atmıştır, bu da uygulamanızın tek iş parçacıklı bir program olacağı,
ancak bir dizi görevi eşzamansız bir şekilde yürüteceği anlamına gelir.
Örneğin, tozlu bir'i kısmen yürüttü ve ardından Görev iki'yi yürütmeye geçti.
Ardından, D2 görevini kısmen yürüttükten sonra, tozlu olanla ilişkili
kalan işi bitirmek için tekrar D1 görevine geçer.
Ve D1 görevi bittikten sonra, D2 görevini tekrar
yerine getirmekten daha zor görevleri yerine getirmeyi ölçer.
Ve devam ediyor.
Dolayısıyla, görev yürütme sırasının ve bu uygulama tasarımı modelinin kesin olmadığını görebilirsiniz.
Görevlerin rastgele bir sırada yürütülebilmesi, bir uygulamanın eşzamansız tasarlanmasına yol açar.
Birinci kademenin kısmen yürütülebildiğini ve aynı görevin
kalan kısmının bir süre sonra yürütüldüğünü görebilirsiniz.
Tamam.
Böylece hiçbir görevin CPU'yu çok uzun süre tüketmediğini görebilirsiniz çünkü eşzamansız
tek iş parçacıklı bir uygulama ve uygulama, görev hala bitmemişken görevi
gerçekleştirmeyi ve ardından hesaplama yapmak için başka bir görev yüklemeyi seçebilir.
Ve son olarak, asenkron çoklu iş parçacıklı uygulama tasarım modeli gelir. Asenkron
çoklu iş parçacığında, yalnızca bir uygulama birden fazla iş parçacığı başlatmakla kalmaz,
aynı zamanda her iş parçacığı bir dizi görevi eşzamanlı bir şekilde yürütür.
Tamam.
Bu yüzden bu derste, tek bir iş parçacıklı tasarım
kullanarak uygulama yapmamızı sağlayan küçük bir kütüphane tasarlayacağız.
Ve daha sonra bu tasarımı, eşzamansız çok iş parçacıklı
tasarım kullanarak bir uygulama gerçekleştirmek için kolayca genişletebiliriz.
Eşzamansız programlama kullanan tek iş parçacıklı bir programın, bir tavan arasındaki
tüm tam sayıların toplamını ve bir adi'nin tüm tam sayılarının
çarpımını, bu iki yürüyüş parçasını görevlere bölerek nasıl hesaplayabileceğini göstereceğim.