Şimdi size kuş gribi kütüphanesini kullanan başka bir demo program göstereyim.
Yani bu örnek program ve ben bunu tamamladım ve hemen hemen hazır atış programıyım.
Bu programda, giyilebilir cihazlar, yükleme ve indirme konularını ele aldım.
Tamam.
Ve bir yükleme fonksiyonu ve indirme fonksiyonu sipariş ettim.
Bu fonksiyonun prototipinin, olay döngüsünün görevine
bağlanabilecek bir şey olduğunu görebilirsiniz.
Ve bu fonksiyonu analiz ederseniz, orada hiçbir şey yok, sadece upload değişkenini iki artırıyor
ve sonra görüyorum, o zaman upload yüzdesi bir şey, upload olan bir şey.
Ancak burada, yükleme değerim 10'un katı olur olmaz
ve hala 100 değilse, mevcut görevi sonlandırdığımı görebilirsiniz.
Bu işlev, olay hukuku kütüphanesi tarafından bir görev bağlamında yürütülecektir.
Ve bu koşul doğru olur olmaz, aynı görevi olay döngüsü kütüphanesi ile zamanlıyorum.
Ve mevcut göreve hükmediyorum, yani bir bakıma yaptığım şey, yükleme yüzdem
zamanın çarpımı haline gelir gelmez mevcut görevi sonlandırıyorum ve aynı
görevi tekrar yapmalıyız, aynı şeyi bu indirme işlevinde de yapıyorum.
Bu indirme işlevi, olay döngüsü kütüphanesi tarafından bir görev bağlamında çağrılacaktır.
Ve indirme değişkeni bunların ayrılmaz bir katı haline gelir gelmez, mevcut
görevi sonlandırıyorum ve aynı görevi olay döngüsü kütüphanesi ile yapmalıyım.
Ve ana işlevde, basitçe yükleme için bir görev ve indirme
için başka bir görev olmak üzere iki görev oluşturacağım.
Şimdi sizden rica ediyorum, bu programı çalıştırmadan bile, bu programın çıktısının
ne olacağını, bu programın nasıl davranacağını anlayabilir misiniz? Dosyanın adından da
anlaşılacağı gibi, demo uygulaması tek iş parçacıklı eşzamanlılık olarak adlandırılır.
Peki bu programı çalıştırırken herhangi bir eşzamanlılığa tanık oldunuz mu? Şimdi size
bu programın çıktısını göstereyim ve sonra neden böyle bir çıktı aldığınızı açıklayacağım.
İşte burada programı çalıştırdım.
Ve burada indirme yüzdesinin 100'e kadar çıktığını ve
yükleme yüzdesinin de 100'e kadar çıktığını görebilirsiniz.
Ve şimdi bile döngü iş parçacığı askıya alındığı boşta durumdadır.
Ancak çıktıdan indirme yüzdesinin yanı sıra yükleme
yüzdesinin de paralel olarak arttığını analiz edebilirsiniz.
Yani, aynı zamanda, indirme yüzdesi zamana göre artar
ve ardından yükleme yüzdesi zamana göre artar.
Sonra yine indirme yüzdesi zamanla artıyor, yükleme yüzdesi 10 artıyor ve devam ediyor.
Peki burada eşzamanlılık görüyor musunuz? İki bağımsız görevin
döngü kütüphanesi tarafından bile zamanlandığını göremiyor musunuz? Alternatif
olarak, başka bir deyişle, eşzamanlı olarak çalışıyorlar mı?
Artık bir programda birden fazla parçamız yok.
Elimizdeki tek parça bu ana iş parçacığı ve olay döngüsü iş parçacığıdır.
Ancak yine de eşzamanlılığı görüyorsunuz, iki görev, indirme görevi ve yükleme
görevi eşzamanlı bir şekilde etiketlenmiş bir olay döngüsü tarafından tetikleniyor.
Başka bir deyişle, iki görev arasında bağlam değiştirmeye benzer bir
şeyin gerçekleştiğini de söyleyebilirsiniz, ancak bağlam değiştirme kabileler arasında gerçekleşir.
Ancak burada davranışın iki görev arasında bağlam değiştirmeye benzer olduğunu
görebiliyoruz, yükleme ve indirme yüzdesi neredeyse aynı anda artıyor.
Yükleme yüzdesinin sıfırdan 100'e çıkması ve ardından sadece indirme
yüzdesinin sıfırdan başlayıp 200 olması söz konusu değildir.
Hem yükleme hem de indirme yüzdelerinin neredeyse aynı anda arttığını görebilirsiniz.
Yani bir bakıma, burada tek bir iş parçacığı ile eşzamanlılık uygulayabiliyoruz.
Bu tek iplik bir şey değil, ama döngü izi bile.
Tamam.
Tebrikler, tek iş parçacıklı bir programda eşzamanlılık uyguladınız.
Yani, tek bir tiyatro programında, birden fazla görev veya birden fazla
iş parçası yapabilir ve bu iş parçalarının ilerleme özelliği göstermesini sağlayabilirsiniz.
Ayrıca bu görevlerin işletim sisteminiz tarafından görülemeyeceğini de unutmayın.
İşletim sisteminiz programınızı iş parçacığı olarak görür.
Yani, işletim sisteminiz programınızın üçte iki ana iş parçacığı ve bir de döngü
iş parçacığı olduğunu bilir, ancak işletim sisteminiz görev hakkında hiçbir şey bilmez.
Görev, kendi yararımız için yarattığımız bir şeydir.
Görev, yapımızda kullanıcı tarafından tanımlanan ve bu programı
çalıştırdığınız temel işletim sistemi tarafından görülemeyen bir şeydir.
Dolayısıyla, görevlerin hesaplama açısından çok yoğun olduğu büyük bir yazılım programında,
bir görevi aynı CPU üzerinde çok uzun bir süre yürütmek istemezsiniz.
Bunun nedeni, programınızdaki diğer görevin CPU için durması ve
bu nedenle aynı görevi tekrar tekrar zamanlamak istemenizdir.
Büyük bir işi küçük küçük parçalar halinde yapmak istiyorsunuz.
Bunun da ötesinde, programınız çoklu görev yapmıyor ve tek iş parçacıklı.
Dolayısıyla, tek iş parçacıklı bir programda da eşzamanlılığı gerçekleştirmeye ihtiyaç vardır.
Bu da bir başka hızlı demo.
Size hem önceki programı hem de bu programı analiz etmenizi
ve farklı şeylerin birbirine nasıl uyduğunu görmenizi ve bu kursun
kalan bölümünde döngülerle bile başka neler yapabileceğinizi analiz etmenizi öneririm.
Size Event Loop Kütüphanesinin gerçek programlama dünyasında meydana gelen
farklı türdeki eşzamansız problemleri çözmek için nasıl kullanılabileceğini göstereceğim.
Ancak bunlar, olay döngülerinin gücünü anlamanıza yardımcı
olmak için size gösterdiğim örnek demo programlardır.