Evet çocuklar, şimdi bunu görelim.
Tipik bir bilgisayar sisteminde birden fazla iş parçacığının nasıl bir arada var olabileceği, bu iş parçacıklarının eşzamanlı bir şekilde nasıl yürütüleceği.
İş parçacıklarının eşzamanlı ve daha sonra paralel bir şekilde nasıl yürütüldüğünü tartışacağız.
Ve bundan sonra, iş parçacıklarının tipik bir bilgisayar sisteminde tekil bir şekilde nasıl yürütüldüğü.
Bu örnekte, T1, T2 ve T3 olmak üzere üç iş parçacığı olduğunu görebilirsiniz.
Ve bilgisayar sisteminin sadece bir CPU kaynağına sahip olduğunu varsayalım, değil mi?
Şimdi 18 eleman içeren bir dizi olduğunu varsayalım.
30'a dizinin ilk altı elemanı atanır.
T2 iş parçacığına dizinin ve iş parçacığının sonraki altı öğesi atanır.
T3'e dizinin sonraki altı elemanı atanır.
Doğru.
Şimdi bildiğimiz gibi iplikler hiçbir şey değildir, ancak işçidirler ve işçilerin bazı işler yapması gerekir.
Öyleyse bu konuların her birine iş atayalım.
Diyelim ki T1, T2 ve T3 iş parçacığı kendilerine atanan dizinin altı elemanının toplamını hesaplamak
zorunda.
Doğru.
Yani 31'in bir ve altı arasındaki elemanların toplamını hesaplaması gerekiyor.
32'nin 7'den 12'ye kadar olan dizi elemanlarının toplamını hesaplaması beklenir.
Ve benzer şekilde, 33'ün 13'ten 18'e kadar olan dizinin elemanlarının toplamını hesaplaması beklenir.
Değil mi?
Burada dikkat edilmesi gereken nokta, bu konuların her birine tahsis edilen işlerin çakışmayan işler olduğudur,
değil mi?
Dizinin t bir iş parçacığına ait hiçbir öğesine sistemdeki başka bir iş parçacığı tarafından erişilemez, işlenemez
ya da manipüle edilemez.
Değil mi?
Yani bu basitçe, bu iş parçacıklarının her birine birbirinden tamamen bağımsız görevler atandığı anlamına
gelir.
Şimdi T1, T2 ve T3 iş parçacıklarının kendilerine atanan görevleri eşzamanlı bir şekilde nasıl yürüteceklerini
görelim.
Öyleyse, işletim sistemi tarafından CPU'yu alanın t iş parçacığı olduğunu varsayalım, değil mi?
Böylece t bir iş parçacığı CPU'yu aldığında, t bir iş parçacığı çalışmaya başlar.
Böylece kendisine atanan dizinin elemanlarının toplamını hesaplamaya başlayacaktır.
Doğru.
Şimdi t bir iş parçacığının bir, iki ve üç olan dizinin toplamını hesapladığını ve dizinin üç numaralı
elemanına kadar olan elemanlarının toplamını hesapladığı anda işletim sisteminin t bir iş parçacığını
CPU'dan çıkarmayı seçtiğini varsayalım.
Doğru.
Ve ipliği yükleyin.
CPU'da T2.
Bu sadece işletim sisteminin t1 iş parçacığından iş parçacığına bağlam geçişi yapmayı seçtiği anlamına gelir.
İşletim sisteminizin, iş parçacığı CPU üzerinde yeterli bir süre çalıştığında bağlam değiştirme
gerçekleştirebileceğini unutmayın.
Dolayısıyla, T1 iş parçacığı CPU'dan çıkarıldığında, işletim sistemi aslında bunu depolar.
İş parçacığının yürütme durumu nedir?
T1 Bu durumda T1 iş parçacığının yürütme durumu, T1 iş parçacığının üç numaralı elemana
kadar dizinin bazı elemanlarını başarıyla tamamladığıdır.
Değil mi?
Buna t1 iş parçacığının bağlamının depolanması denir.
Şimdi aynı alıştırma t2 ipliği ile tekrarlanır.
Şimdi CPU'ya atanmış olan t2 iş parçacığıdır ve t1 iş parçacığı gibi T2 iş parçacığı da t2 iş parçacığına
ait dizinin elemanlarının toplamını hesaplayabilir.
T2 iş parçacığının yedi, sekiz ve dokuzuncu öğelerin toplamını başarıyla hesapladığını varsayalım.
Doğru ve şimdi işletim sistemi CPU'yu tekrar T2 iş parçacığından almayı ve CPU'yu tekrar t3 iş parçacığına
atamayı seçiyor.
Doğru.
Şimdi t1 ve t2 iş parçacığı işletim sisteminin zamanlama kuyruğunda beklemektedir.
Dolayısıyla işletim sistemi, hazır kuyruğu veya zamanlama kuyruğu olarak adlandırdığımız bir kuyruk tutar.
CPU bekleyen tüm iş parçacıkları bu kuyrukta bekleyecektir.
Doğru.
İş parçacığı çizelgeleme algoritmalarını incelerken bunu çok daha ayrıntılı olarak inceleyeceksiniz.
Şimdi T3 iş parçacığına CPU atandığında, T3 iş parçacığı işini yapmaya başlayacaktır.
Ve diyelim ki T3 iş parçacığı 13, 14 ve 15 dizilerinin elemanlarının toplamını
başarıyla tamamladığında, işletim sistemi yine aynı şeyi yapar.
CPU'yu T3 doğru iş parçacığından uzaklaştırır.
Böylece, bu iş parçacıklarının her birinin CPU'yu tek tek paylaştığını ve bağlam geçişinin t1 iş parçacığından T2 iş
parçacığına ve ardından t2 iş parçacığından T3 iş parçacığına gerçekleştiğini görebilirsiniz.
Doğru.
Bu nedenle, T3 iş parçacığı hazır kuyruğuna yerleştirildiğinde, işletim sistemi hazır kuyruğundan ilk
iş parçacığını alacak ve bu iş parçacığına tekrar bir CPU atamaya çalışacaktır.
Yani bu basitçe, t1 iş parçacığına CPU'nun tekrar atandığı ve şimdi t1 iş parçacığının en son kaldığı yerden göreve devam edeceği anlamına
gelir, bu nedenle şimdi dizinin öğelerinin toplamını hesaplamaya devam edecektir.
Ve bu sefer T1 iş parçacığının kendisine atanan dizinin tüm elemanlarının toplamını tamamladığını
varsayalım.
Değil mi?
Yani şimdi 31 görevini tamamladı, değil mi?
Ve şimdi 31 kendini sonlandırmayı seçebilir.
Benzer şekilde, 32'ye de CPU atanır.
Ve 32'nin de bekleyen işini bitirdiğini varsayalım.
Yani, 10, 11 ve 12 dizilerinin elemanlarının toplamını da hesaplar.
Ve aynı şey iplik için de geçerli.
33 sağ.
Böylece tüm iş parçacıkları tekrar CPU'ya atanır.
Böylece bu iş parçacıklarının birbirleriyle koordinasyon içinde çalıştığını görebilirsiniz.
Ve bu koordinasyon tamamen işletim sistemi tarafından kontrol edilir.
CPU'dan kaldırılan CPU'nun hangi iş parçacığını önceleyeceğine ve CPU'ya hangi iş parçacığının yükleneceğine
karar veren işletim sisteminizdir.
Doğru.
Dolayısıyla, CPU'yu bir kaynak olarak paylaşan iş parçacıklarının tek tek yürütülmesine ilişkin bu model, iş parçacığının eşzamanlı
yürütülmesine bir örnektir.
Tüm bu konuların ilerleme özelliğini gösterdiğini görebiliyorsunuz, değil mi?
Her bir iplik kısmen de olsa işini yapıyordu, ama yapıyordu.
Şimdi de iş parçacıklarının sistemde paralel bir şekilde nasıl çalıştığını tartışalım.
Değil mi?
Dolayısıyla sorun ifadesi hala aynıdır, sistemde üç iş parçacığı vardır ve her iş parçacığına gerçekleştirmesi
için bazı görevler atanmıştır ve görev hiçbir şey değildir.
Ancak bu iş parçacıklarının her biri kendi dizilerinin öğelerinin toplamını hesaplamak zorundadır.
Şimdi, iş parçacıkları arasındaki paralelleştirmeyi gerçekleştirmek için sistemde daha fazla donanım kaynağına sahip
olmanız gerekir.
İşte bu nedenle bir CPU yerine artık üç CPU'nuz var.
Diyelim ki bu CPU bir, bu CPU iki ve bu da CPU üç.
Değil mi?
Paralel yürütmenin daha fazla kaynak talep ettiğini ve böylece bu kaynakların kullanıcıları tarafından
paralel olarak kullanıldığını zaten görmüştük.
Yani bu durumda kaynaklar CPU'dur ve bu kaynağın kullanıcıları iş parçacıklarıdır.
Dolayısıyla, iş parçacıklarının paralel yürütülmesi söz konusu olduğunda,
işletim sistemi iş parçacığı bir CPU birde iş parçacığı ikiyi CPU ikide ve iş parçacığı üçü CPU'da programlayacaktır.
Üç sağ.
Ve bu iş parçacıklarının her birine doğru yapmaları için çakışmayan işler verildiğini zaten varsaymıştık.
Konuların hiçbiri diğerinin çalışmasını ihlal etmez.
İş parçacıklarından hiçbiri diğer iş parçacıklarının iş yürütmesinde herhangi bir engel oluşturmaz.
Yani basitçe bu konuya tercüme edilir.
T1 ve T2 ve tehdit T3 üç farklı CPU üzerinde paralel olarak çalışacaktır.
Doğru.
Bu nedenle, bir önceki ders videosunda tartıştığımız eşzamanlı örneğe kıyasla toplam işi çok daha
hızlı tamamlayacaklarını söylemeye gerek yok.
Paralelleştirmede hiçbir iş parçacığı CPU'yu engellemez veya sistemdeki diğer iş parçacıklarından alıkoymaz.
Değil mi?
Tüm iş parçacıkları, işlemlerini kendi CPU'larında paralel olarak mutlu bir şekilde yürütebilir.
Ve çocuklar, şimdi son olarak tipik bir bilgisayar sisteminde birden fazla iş parçacığının nasıl tekil bir şekilde çalıştığını
görelim.
Dolayısıyla sorun ifadesi aynı kalmaktadır; üç iş parçacığı vardır ve bu iş parçacıklarının her birinin yapması
gereken kendi işleri vardır.
Şimdi bu üç iş parçacığının yürütülmesine tekillik kısıtlamalarını uygulayalım
ve işletim sisteminin CPU'yu T1 iş parçacığına tahsis edeceğini fark edeceğiz.
Ve t1 iş parçacığı işini tamamlayana kadar CPU'yu t1 iş parçacığından almayacaktır.
Doğru.
Yani bu, bağlam değiştirme olmadığı veya tekil yürütme modelinde iş parçacıklarının önceliği olmadığı
anlamına gelir.
Değil mi?
Şimdi T1 iş parçacığının görevini tamamladığını varsayalım.
Buradaki görev, dizinin T1 iş parçacığına atanan kısmının tüm öğelerinin toplamının hesaplanması
anlamına gelir.
Şimdi, T1 iş parçacığı bittiğinde, işletim sistemi CPU üzerinde başka bir iş parçacığı atayacaktır.
Doğru.
T2 iş parçacığı T1 iş parçacığı işini tamamlayana kadar bekledi ve şimdi T3 iş parçacığı T2 iş parçacığı
işini tamamlayana kadar bekliyor.
Yani bu, tekil iplik yürütme modelinde ilerleme olmadığı anlamına gelir.
İlerleme yok.
T3 iş parçacığı henüz çalışmaya başlamamıştır ve CPU T2 iş parçacığından alındığında, işletim sistemi
CPU'yu nihayet t3 iş parçacığına tahsis edecektir.
Doğru.
Dolayısıyla, iş parçacıkları tekil olarak bu şekilde yürütülecektir.
Bu örnekte, bir veya üç CPU'ya sahip olmanız gerçekten önemli değil, değil mi?
Eğer üç CPU'nuz varsa, diğer iki CPU boşa gidecekti, değil mi?
Hiç kullanılmıyorlar.
Yani bu basitçe, tekil iş parçacığı yürütme modasının gerçek dünyada var olmadığı anlamına gelir.
Ya eşzamanlılık ya paralellik ya da her ikisi de vardır.
Ancak iş parçacıklarının tekil bir şekilde yürütülmesi pratik dünyada gerçekten mevcut değildir.
Tüm bu tartışmalar ışığında, bir kez daha paralellikte geçen sürenin iş parçacıklarının tekil olarak yürütülmesinde geçen süreden
çok daha az olduğu ve iş parçacıklarının tekil olarak yürütülmesinde geçen sürenin iş parçacıklarının eşzamanlı
olarak yürütülmesinde geçen süreden daha az olduğu sonucuna varabiliriz.
Doğru.
Bu denklemin arkasındaki mantığı daha önce açıklamıştım; iş parçacıklarının eşzamanlı yürütülmesinde,
yalnızca iş parçacıkları arasında bağlam geçişi yapılırken çok fazla zaman harcanır.
Bağlam değiştirmenin pahalı bir işlem olduğunu unutmayın.
Dolayısıyla, iş parçacıklarının tekil bir şekilde yürütülmesinin CPU'nun iş parçacıklarına tahsisi için pratik bir yaklaşım
olmadığı sorusu ortaya çıkmaktadır.
Ve gerçek pratik dünyada var olan şey, iş parçacıklarının paralel yürütme yolu ve iş parçacıklarının eşzamanlı
yürütme yoludur.
Değil mi?
Günümüzün modern bilgisayar sistemleri aslında iş parçacıklarının paralel yürütülmesi ile iş parçacıklarının eş zamanlı
yürütülmesini destekleyen hibrit sistemlerdir.
Doğru.
Peki bunu neden yapmamız gerekiyor?
Bunu bir sonraki ders videosunda tartışalım.