Evet çocuklar, şimdi ileriye doğru gidiyoruz.
Sonuç olarak eşzamanlılığa ihtiyacımız var çünkü paralelliği uygulamak için gerçekten çok sayıda
CPU'ya sahip olamayız.
CPU'ların paylaşılması gerekiyor, değil mi?
Çünkü sisteminizde çalışan yüzlerce işlem olabilir, ancak yüzlerce CPU'ya sahip
olamazsınız, böylece bu işlemlerin her birini farklı bir CPU'da çalıştırabilir ve aynı zamanda ilerlemeyi
sağlamanız gerekir, değil mi?
İşte bunlar bizi bilgisayar sistemimizde eşzamanlılığa zorlayan iki nedendir.
İşini veya hedefini gerçekleştirmek için birden fazla iş parçacığına ihtiyaç duyan tipik bir
süreci ele alalım.
Doğru.
Şimdi böyle bir örneği ele alalım.
Bu nedenle, bir girdi çıktısını beklemeye ihtiyaç duyulduğunda çok iş parçacıklı bir süreç olarak bir sürece ihtiyaç
duyarız ve aynı zamanda sürecin aynı anda işi tamamlamak için çalışmaya devam etmesi gerekir.
Değil mi?
Yani, sürecin bazı girdi çıktılarını beklemesi ve aynı zamanda sürecin aynı anda bir
miktar tahsis edilmiş işi yürütmesi gerekir.
Yani açıkça sürecinizin çok iş parçacıklı olması gerektiği anlamına geliyor, değil mi?
Şimdi bunu bir örnek yardımıyla tartışalım.
Bir iş parçacığında ağ paketlerini bekleyen bir süreciniz olduğunu varsayalım, değil mi?
Sadece bir ağ uygulamasını temsil eden bir işleminiz var ve tipik bir ağ uygulamasının çok
temel bir gereksinimi, ağ uygulamasının bir ağ paketinin gelmesini beklemesi gerektiğidir,
değil mi?
Bir ağ paketi herhangi bir zamanda gelebilir.
Diyelim ki bir iş parçacığında bir ağ paketini bekleyen bir sürecimiz var,
aynı süreç diğer iş parçacığında sürekli olarak bazı periyodik ağ paketleri gönderiyor.
Doğru.
Üçüncü gereklilik ise aynı sürecin kullanıcı girdisini beklemesi gerektiğidir, değil mi?
Böylece bir numaralı iplik, iki numaralı iplik ve üç numaralı ipliğe ihtiyaç olduğunu görebilirsiniz.
Ve tüm bu konuların kendi görevlerini aynı anda yerine getirmesi gerekir.
Süreç bir numaralı iş parçacığında bir ağ paketi için beklerken, bir uygulamanın kullanıcı
girdisini kabul edememesi söz konusu olmamalıdır.
Doğru.
Ve uygulama kullanıcı girdisini alırken, uygulamanın veya sürecin gelen ağ paketini
kabul edememesi söz konusu olmamalıdır.
Değil mi?
Dolayısıyla, bu üç görevin de bu tipik süreç tarafından aynı anda yapılması gerekir.
Bu da basitçe bu sürecin çok iş parçacıklı olması gerektiği anlamına gelir.
Şimdi bu süreci bir diyagram yardımıyla görselleştirmeye çalışalım.
Bunun bir ana iş parçacığı olduğunu varsayalım, değil mi?
Ve bu P süreci bir T üç iş parçacığı başlatır ve bunun F çatal noktası olduğunu söyleyelim, F bir diyelim.
Değil mi?
Yani bu, ağ paketlerinin gelmesini ve ağ paketinin gelmesini bekleyen T üç iş
parçacığıdır.
İş parçacığı içinde ağ paketini işleyen süreç.
Üç sağ.
Ve sonra tekrar bir sonraki ağ paketini bekler.
Benzer şekilde, bu sürecin ikinci gereksinimi de periyodik paketlerin gönderilmesiydi.
Şu anda periyodik paket göndermek sürekli bir süreçtir.
Bunun için sürecimiz başka bir konu başlattı.
İki sağ.
Ve T iki iş parçacığının amacı sadece bazı ağ paketlerini hazırlamak ve ağda periyodik olarak
göndermektir.
Değil mi?
Yani süreç kendi iş parçacığında başka bir iş yapıyor.
T 2.
Diyelim ki burası çatal noktası.
F2.
Ve şimdi sürecin üçüncü gereksinimi, kullanıcı girdi sağladığında kullanıcı girdisini de kabul
etmesi gerektiğidir, değil mi?
Bunun için sürecimizin başka bir şehir iş parçacığı başlatması gerekir.
Değil mi?
Ve bunun dördüncü nokta F üç olduğunu varsayalım, değil mi?
Yani T iş parçacığının amacı sadece kullanıcı girdisini beklemektir, değil mi?
Ve kullanıcı girdisi alınır alınmaz, t bir iş parçacığı bu girdiyi işleyecektir.
Gördüğünüz gibi bu, sürecimizin çoklu iş parçacıklı bir süreç olmasının gerekli olduğu örneklerden
biridir.
Uygulamanın işlem yapabilmesi için paketin gelmesini beklemek herhangi bir tipik ağ uygulamasının çok temel
bir gereksinimidir ve ağ uygulamasının da periyodik paketler göndermek gibi tipik bir
rolü vardır.
Doğru.
Yani tipik bir ağ uygulamasında T3 ve T2 iş parçacıklarını, en azından T3 ve T2 iş parçacıklarını
göreceksiniz, değil mi?