Arkadaşlar, görev önceliklendirmesini yeni uyguladık.
Şimdi bunu tartışalım.
Görev önceliklendirmesini uygulayarak halihazırda ele aldığımız sorunlar nelerdir?
Dolayısıyla, temel olarak üç ana sorunu ele aldık ve komutları en öncelikli görev haline getirdik.
Kullanıcı yanıt süresi geliştirilmiştir.
Bunu tartışacağız.
Paket işlemenin en yüksek öncelikli görev haline getirilmesi, gelen
ağ paketinin zamana bağlı bir şekilde işlenmesine yardımcı olur.
Gelen belirli ağ paketlerine zamana bağlı bir şekilde
basmazsanız, bu durum bazı sorunlara yol açabilir.
Ve silme görevlerini düşük öncelikli görevler haline getirmek.
Nesnelerin erken silinmesi ele alınmıştır.
Yani bu tamamen ayrı bir sorun.
Ve üç numaralı noktayı tartışmak için özel bir bölümümüz var.
Tamam.
Bu nedenle, show komutunun en yüksek periyodik görev haline
getirilmesinin kullanıcı yanıt süresini artırdığı birinci noktayı tartışalım.
Öyleyse anlamaya çalışalım, eğer show komutunu en yüksek öncelikli görev
yapmazsanız, olay döngüsü ile çalışan uygulamanızda ne olacak? Diyelim ki
orta öncelikli ve önalımlı olarak çalışan bir A algoritmanız var.
Tamam.
A algoritmasının toplam hesaplama süresi beş saniye olsun ve
A algoritması her bir saniyede bir ön deneme yapsın.
Tamam.
Yani bunlar A algoritmasının özellikleridir.
Diyelim ki olay döngünüz A algoritmasını programlıyor ve yürütüyor.
Yani A1, A2, a3 hiçbir şey değildir.
Ancak bunlar A algoritmasının taksitleri olup, her ön
alımdan sonra olay döngüsü iş parçacığı tarafından programlanır.
Tamam.
Diyelim ki olay döngüsü iş parçacığınız A algoritmasının yürütülmesiyle başlıyor.
Yani bir saniye sonra A algoritması yazdırır.
Ancak olay döngüsü kuyruğunda başka bir görev olmadığı için.
Bu nedenle olay döngüsü iş parçacığınız A algoritmasını yeniden programlar.
Bir saniye sonra, olay döngüsü kuyruğunda başka
bir görev olmadığı için A algoritması öncelenir.
Böylece A3 algoritması yine olay döngüsü iş parçacığımız tarafından zamanlanır.
Tamam.
Bu noktada şunu söyleyelim.
Kullanıcı show komutunu tetikler.
Show komutu, kullanıcının bazı veri yapılarını görüntülemek istediği anlamına gelir.
SDP sürecimizde buna karşılık gelen bir numaralı seçeneğimiz var.
Bu, yönlendirme tablosunun görüntülenmesidir.
Dolayısıyla, bu noktada kullanıcı olay döngüsü kuyruğunda
show komutunu tetikler tetiklemez, show görevi zamanlanacaktır.
Tamam.
Böylece olay döngüsü kuyruğuna gösteri görevi yerleştirilecektir.
Ancak bu noktada A üç algoritması olay döngüsü iş parçacığı tarafından yürütülme sürecindedir.
Tamam.
Ve üçüncünün sonunda.
İkincisi.
A algoritması öncelenir ve olay döngüsü kuyruğuna geri yerleştirilir.
Şimdi, zamanın bu noktasında, olay döngüsü kuyruğunda, algoritma a
görevi ve kısa görev olmak üzere iki görev vardır.
Tamam.
Ancak kısa göreve algoritma görevine kıyasla daha yüksek bir öncelik verilir.
Algoritma görevi orta öncelikli, kısa görev ise yüksek önceliklidir.
Dolayısıyla, bu noktada, olay döngünüz sonunda gösteri görevini seçecek
ve sonuç olarak gösteri göreviniz artık CPU üzerinde yürütülecektir.
Ya da başka bir deyişle, artık kullanıcı show komutunu
tetiklemesinin bir sonucu olarak ekranda çıktı görmeye başlayacaktır.
Tamam.
Yani bu noktayı 2,5 olarak alırsak, ikinci kullanıcı
0,5 saniye sonra ekranda çıktıyı görmeye başlayacaktır.
Böylece kullanıcı 0,5 saniyelik bir gecikme yaşayacaktır.
Ve show komutunun yürütülmesi tamamlandığında, diyelim ki show komutu dört saniye sürüyor.
Özür dilerim.
Diyelim ki show komutu bir saniye sürüyor.
Yani dört saniyenin sonunda show komutu tamamlanmış olur.
Ve şimdi olay döngüsü iş parçacığınız Olay Döngüsü kuyruğunda mevcut olan bir sonraki görevi zamanlayacaktır, bu
da kalan algoritma görevinden başka bir şey değildir, bu nedenle algoritma görevini her zamanki gibi bitirecektir.
Sonuç olarak, kullanıcı show komutunu tetiklediği andan ekranda çıktıyı
görmeye başladığı ana kadar 0,5 saniyelik bir gecikme yaşar.
Şimdi, bunun aksine, iki numaralı senaryoyu tartışalım.
Ve iki numaralı senaryo.
Kısa göreve orta öncelik verilirken, A algoritmasına daha yüksek öncelik verilir.
Yani, öncelik tersine çevrilmiştir.
Şimdi bunu görebilirsiniz.
Kullanıcı artık uygulama ile uğraşırken çok fazla gecikme yaşayacaktır.
Diyelim ki her zamanki gibi olay döngüsü iş parçacığı A algoritmasını yürütüyor.
Yani bu sıfırıncı saniye, bu da birinci saniye.
Bu ikinci, ikinci çünkü hiç görev yoktu.
Yani olay döngüsü iş parçacığınız algoritmayı tekrar tekrar zamanlıyordu.
Ve diyelim ki 2.5 saniyede kullanıcı her zamanki gibi show komutunu tetikledi.
Dolayısıyla, bu noktada, olay döngüsü kuyruğuna yerleştirilen tek
bir görev vardır, o da kısa görevdir.
A algoritması yürütme durumundayken.
Üç saniyenin sonunda, olay döngüsü kuyruğunda iki görev bulunacaktır.
Algoritma görevi ve kısa görev.
Tamam.
Algoritma görevinin yarısı yürütüldü, ancak hala devam ediyor.
Ancak şimdi algoritma görevine daha yüksek öncelik verilmektedir.
Bu nedenle, olay döngüsü iş parçacığınız CPU'da programlanacak A algoritması ile devam edecektir.
Tamam.
A4 ve A5 olan A algoritmasının kalan kısmı ve yalnızca A algoritması yürütülmesini tamamladığında,
yalnızca kısa görev olay döngüsü iş parçacığı tarafından CPU'yu tahsis etme şansına sahip olacaktır.
Yani, bunun sonucu olarak.
İkinci senaryoda, görebilirsiniz.
Böylece kısa görevin CPU'yu yalnızca beşinci saniyenin sonunda tahsis edeceğini görebilirsiniz.
Yani kullanıcı show komutunu 2,5 saniyede tetikledi, ancak
show görevine CPU beş saniyenin sonunda tahsis edildi.
Yani 2,5 saniyelik bir gecikme veya gecikme diyebilirsiniz.
Tamam.
Ve bu oldukça kötü.
Eğer kullanıcı uygulama ile etkileşime geçerken 2,5
saniyelik bir gecikme yaşarsa, kullanıcı rahatsız olacaktır.
Peki nedenini anlayabiliyor musunuz? Olay döngüsünde zamanlama söz
konusu olduğunda, kullanıcı deneyimiyle ilgilenen herhangi bir
göreve en yüksek önceliğin verilmesi oldukça önemlidir.