Şimdi SDP sürecimizde ön alma kavramını
uygulayacağımız bir örneği ele alalım.
Dolayısıyla, görevin öncelenmesi ve yeniden planlanması için
görevin kaldığı yerden devam etmesi gerekir.
Tamam.
Bu oldukça açık.
Uygulama, yazdırmadan önce görev durumunu kaydetmeli ve görev olay
döngüsü iş parçacığında tekrar zamanlandığında görev durumunu geri yüklemelidir.
Tamam.
Yani bu, işletim sistemimiz tarafından iş parçacığı
değiştirme bağlamında yapılan bağlam değiştirmeye biraz benzemektedir.
İşletim sisteminizin iş parçacığı işletim sisteminiz tarafından yeniden
planlandığında, iş parçacığınız aynı durumdan yürütülmeye devam eder.
Burada iş parçacığının durumu, iş parçacığının yürütme yığını olan aynı iş parçacığı yığını anlamına gelir.
Ve bir sonraki talimattan itibaren.
Tamam.
Dolayısıyla, iş parçacığınız bu talimatı yazdırdıysa, I daha sonra yeniden planlandıktan sonra iş
parçacığı, diyelim ki I artı bir olan bir sonraki talimattan yürütmeye devam etmelidir.
Tamam.
Ve iş parçacığı yığını ne olursa olsun, iş parçacığı yeniden
planlandığında aynı iş parçacığı yığınının belleğe yeniden yüklenmesi gerekir.
Yani buradaki benzetme bir kitap okumaktır.
Örneğin, kitabı 20. sayfaya kadar okuduktan sonra bir süre
okumaya ara verdiyseniz ve daha sonra tekrar geri
dönüp kitabı okursanız, kaldığınız 20. sayfadan devam edersiniz.
Bu yüzden benzer konsepti olay döngüleri bağlamında uygulayacağız.
Yani burada görev durumu, görevin ne kadar işi tamamladığını hatırlamak anlamına gelir.
Pekala, öyle ya da böyle, veri yapınızı öyle bir şekilde korumalısınız ki,
görevin önüne geçmeden önce, uygulamanız görevin ne kadar işi tamamladığını hatırlamalıdır.
Tamam.
O zaman tekerleği yeniden icat edelim.
Yönlendirme tablosu girdilerini yazdıran bir fonksiyonumuz zaten var.
Ancak bu işlev şu anda ilkel bir işlev değildir.
Bu yüzden bu fonksiyonu yeniden keşfedeceğiz ve ön
alma ve bağlam kaydetme kavramını kullanarak uygulayacağız.
Diyelim ki her ön alma ve yeniden zamanlamada
yönlendirme tablosundan on girdiyi artımlı olarak yazdıralım.
STP sürecimizi tekrar başlatmama izin verin.
Ve beş numaralı seçeneği kullanarak 40.000 numaralı bağlantı noktasını dinlememe izin verin.
Şimdi başka bir pencerede bazı rotaları öğreneceğim.
Bir numaralı seçeneği kullanarak yönlendirme tablosunu yazdırabileceğimizi görebilirsiniz.
Yani şu an itibariyle yönlendirme tablosunda 100 girişimiz var.
Ve STP işlemimiz tüm yönlendirme tablosunu herhangi bir ön alma olmadan tek seferde yazdırıyor.
Böylece yönlendirme tablosunun yazdırılması olay döngüsü iş parçacığı tarafından yapılır.
Ancak bu görev önleyici olmayan bir görevdir.
Tamam.
Oops.
Yönlendirme tablosu girişleri zaman aşımına uğradığı için silinmiştir.
Ama her neyse, onları yeniden öğreneceğim.
Tamam, diyelim ki yönlendirme tablonuzda beş adet 50.000 girdi var.
Tamam.
Dolayısıyla, yönlendirme tablosundaki 50.000 girdinin tamamının
görüntülenmesi, diyelim ki beş saniye sürebilir.
Yani bu beş saniye boyunca CPU'nuz sadece bir işlev tarafından engellenir.
Tamam.
Bir olay döngüsü kuyruğuna yerleştirilen başka hiçbir görev beş saniye boyunca CPU alamaz
ve bu nedenle zamanlanmış diğer olay döngüsü görevleri için CPU açlığına neden olur.
CPU'yu yalnızca mevcut göreviniz yürütülmesini tamamladığında alırlar, ancak
yönlendirme tablosunu yazdıran mevcut görev çok zaman alır.
İşte bu nedenle şimdi tekerleği yeniden icat edeceğiz ve
tüm yönlendirme tablosunu yazdıran yeni bir fonksiyon uygulayacağız.
Ancak yönlendirme tablosundaki her on girdiyi yazdırdıktan sonra,
işlevimiz veya olay döngüsü görevimiz kendini yazdıracaktır.
Bir olay döngüsü iş parçacığı, on girdi daha yazdırmak için bunu yeniden planlayacaktır.
Ve bu işlem tüm yönlendirme tablosu yazdırılana kadar döngü halinde gerçekleşecektir.
Bir sonraki ders videosunda böyle bir fonksiyonu nasıl uygulayabileceğinizi göstereceğiz.