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ı gerekir.
Doğru.
Çünkü sisteminizde çalışan yüzlerce işlem olabilir, ancak bu işlemlerin her
birini farklı bir CPU'da çalıştırabilmeniz için yüzlerce CPU'ya sahip olamazsınız.
Aynı zamanda ilerlemeyi de sağlamanız gerekir.
Değil mi? İşte bizi bilgisayar sistemimizde
eşzamanlılığa zorlayan iki neden bunlardır.
İşini veya hedefini gerçekleştirmek için birden fazla iş
parçacığına ihtiyaç duyan tipik bir süreci ele alalım.
Değil mi? Şimdi böyle
bir örneği ele alalım.
Dolayısıyla, bir girdi çıktısını beklemeye ihtiyaç duyulduğunda çok iş parçacıklı
bir süreç olarak bir sürece ihtiyacımız olacak, aynı zamanda süreç
aynı anda dünyayı tamamlamak için çalışmaya devam etmelidir? Doğru.
Yani, sürecin bazı girdi çıktılarını beklemesi ve aynı zamanda sürecin
aynı anda tahsis edilen bir miktar işi yürütmesi gerekir.
Yani bu açıkça sürecinizin çok iş parçacıklı olması gerektiğini ima
ediyor, değil mi? Şimdi bunu bir örnek yardımıyla tartışalım.
Bir iş parçacığında ağ paketlerimizi bekleyen bir süreciniz olduğunu varsayalım.
Doğru mu? 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.
Doğru.
Ben değilim.
Bir paket herhangi bir zamanda gelebilir.
Diyelim ki bir ağ paketini bekleyen bir sürecimiz var ve bu süreç iş parçacıklarından
biriyken 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.
Doğru.
Dolayısıyla, bir numaralı iş parçacığına, iki numaralı iş parçacığına ve üç numaralı iş parçacığına ihtiyaç
olduğunu ve tüm bu iş parçacıklarının kendi görevlerini aynı anda yerine getirmeleri gerektiğini görebilirsiniz.
Süreç bir numaralı iş parçacığında ağ paketimizi 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 bir
hakkı olan ağ paketini kabul edememesi söz konusu olmamalıdır.
Doğru.
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 ana iş parçacığımız olduğunu varsayalım, değil mi?
Ve bu işlem başlatıldığında üç tane çekiyor.
Ve diyelim ki bu F1 olan dört noktalı
def, değil mi? Yani bu, ağ paketlerinin gelmesini
ve ağ paketinin gelmesini bekleyen D3 iş parçacığıdır.
Süreç, 383 içinde ağ paketinin olduğu bir süreçtir.
Tamam mı? Ve sonra tekrar
bir sonraki ağ paketini bekler.
Benzer şekilde, bu sürecin ikinci gerekliliği de şu anda periyodik
paketlerin gönderilmesiydi, periyodik paketimizi sürekli bir süreç olarak gönderdik
ve şu ana kadar sürecimiz 382 tane daha başlattı.
Doğru.
Ve 382'nin amacı basitçe bazı ağ paketlerini hazırlamak ve ağda periyodik olarak göndermektir.
Doğru.
Yani süreç, stratejisinde başka bir iş daha yapıyor.
Diyelim ki bu nokta ve şimdi sürecin üçüncü gereksinimi,
kullanıcı girdiyi sağladığında kullanıcı girdisini de kabul etmesi gerektiğidir.
Doğru.
Bunun için sürecimizin başka bir şehir iş parçacığı başlatması gerekir.
Doğru.
Diyelim ki mesele bu.
Doğru.
Yani 381'in amacı sadece kullanıcı girdisini beklemektir.
Doğru mu? Ve kullanıcı girdisi alınır
alınmaz, 381 bu girdiyi işleyecektir.
Gördüğünüz gibi bu, sürecimizin çok 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 tipik bir
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 herhangi bir tipik ağ uygulamasında 33 ve 32'yi,
en azından 33 A. ikisini göreceksiniz, değil mi?