Şimdi, uygulama mantığı görev aracılığıyla yürütüldüğü ve bu görev
de olay döngüsü iş parçacığı tarafından tetiklendiği sürece, çift
döngü kullanan uygulamaların kilitsiz olduğu noktasını anlamaya çalışalım.
Bu nedenle, en temel düzeyde neden üçlü senkronizasyon ve
kilitlemeye ihtiyaç duyulduğunu açıkladığım bir önceki dersi anladığınızı umuyorum.
Bu nedenle, olay döngüleri kullanan ve bu nedenle
kilitlere ihtiyaç duymadığımız uygulamada aslında bu neden yoktur.
Olay döngüsü kullanan uygulamalarda bu noktayı anlamaya çalışalım.
Olay döngüsü iş parçacığı adı verilen sadece ve sadece bir iş parçacığı
vardır ve tüm uygulama kodunu görev aracılığıyla yürüten bu iş parçacığıdır.
Tamam.
Yani sistemde sadece ve sadece bir iş parçacığı vardır, bu da bir döngü iş parçacığıdır.
Peki bu, neden herhangi bir kilitlemeye ihtiyaç duymadığınızın ilk ve açık
nedenidir? Çünkü olay döngüsü kullanan uygulamanız genellikle iş parçacıklı bir uygulamadır.
Aynı veri kaynağına erişmek için yarışan birden fazla zaman yoktur.
Peki neden kilitlemeye ihtiyacınız var?
Ancak bu sebep yeterli değildir.
Bunu, beni geçen hatalı döngülerden yararlanan birim transit sistemlerinde görebilirsiniz.
Yani T1 görevinden D2 görevine ve bunu göstermek için
size daha önce bir yükleme indirme örneği göstermiştim.
Ve bu örnekte, yükleme görevi ve indirme görevi olmak üzere iki görev arama yoluyla gerçekleştiriliyordu.
Şimdi soru şu.
Ve üniter bir sistemde bile, kulenin değiştiği sistemde, bağlam değiştirmeye benzer
bir şey olduğu ve buna görev değiştirme adı verildiği için,
görevler arasında senkronizasyon için günlüklere ihtiyacımız olacağı anlamına mı geliyor?
Tamam.
Dolayısıyla, birleşik bir kimlik sisteminde, olay döngülerini kullanmak bana bir anahtar attı ve bu görevi
kapatma görev değiştirme olarak adlandırılırken, iş parçacıkları arasındaki normal geçiş bağlam değiştirme olarak adlandırılır.
Şimdi soru şu ki, bir anahtarlama olduğuna göre, bu nedenle kilitlere ihtiyacımız
var mı? Olay döngüsü kullanan uygulamanın benzersiz bir hedef uygulama olduğu açıktır.
Ancak bu uygulamalarda bir de görev değiştirme vardır.
Peki bu görev değişimi nedeniyle kilitlere
ihtiyacımız var mı? Asıl soru bu.
Yani cevap, görev değişiminin kontrollü bir şekilde gerçekleşmesidir.
Kontrollü moda dediğimde, bunun geliştiricinin elinde olduğu anlamına geliyor.
Mevcut görevine hakim olmayı ve yeni bir görev yüklemeyi sever.
İndirme yükleme örneğini analiz ederseniz, olay döngüsünün yükleme görevini yürüttüğünü varsayalım.
Dolayısıyla, bu göreve hakim olan ve olaya neden olan bu yazılı ifadedir.
Loop, indirme görevi olan yeni göreve geçmeye çalıştı, böylece
mevcut görev baskın olduğunda geliştiricinin eli olduğunu görebilirsiniz.
Ancak o zaman uçan tüccar bile yeni görevi över.
Tamam.
Bu nedenle, devam eden görevleri her zaman sonlandırmak geliştiricinin sorumluluğundadır,
böylece uygulama veri yapılarının tutarlı bir durumda bırakılması garanti edilir.
Tamam.
Bu nedenle, denenen olay döngüsü tarafından yüklendiğinde yeni görevin uygulama veri yapılarını tutarlı
bir durumda göreceğinin garanti edildiği bir noktada mevcut geçmişine her zaman hakim olmak
geliştiricinin sorumluluğundadır, oysa bağlam durumunda bu nokta değildir, anahtarlama bağımsız iş parçacıkları arasında
gerçekleşir, türler sadece bir programın herhangi bir keyfi noktasında istedikleri zaman geçiş yapar.
Dolayısıyla, uygulama kodunu yürüten ana itici gücün eşit döngülü bir iş
parçacığı olduğu uygulamalarda herhangi bir kilitlemeye ihtiyaç duymamamızın ana nedeni budur.
Dolayısıyla, görev sonlandırıldığında, uygulama veri yapılarını
tutarsız durumda bırakmamak programın sorumluluğundadır.
Ve neden herhangi bir programcı bir dilbilimciden bir notu
silmenin ortasındayken o anda yürütülmekte olan bir görevden
geri dönsün? Sadece bağlı listeden bir notun silinmesini
tamamladığında bir görev fonksiyonundan geri döneceği oldukça açıktır.
Tamam.
Dolayısıyla, olay döngüsü tarafından yüklenecek yeni görev her zaman uygulama veri
yapılarını görüntüleyecek ve durumu tutarlı hale getirecektir ve bu garantilidir.
Peki ikinci neden, görev değiştirme olduğu için
kilitlemeye ihtiyacımız var mı? Cevap hayır.
Hala herhangi bir kilitlemeye ihtiyacımız yok.