WEBVTT

00:05.000 --> 00:06.860
Evet çocuklar, şimdi bunu görelim.

00:06.860 --> 00:15.170
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.

00:15.200 --> 00:21.200
İş parçacıklarının eşzamanlı ve daha sonra paralel bir şekilde nasıl yürütüldüğünü tartışacağız.

00:21.200 --> 00:26.690
Ve bundan sonra, iş parçacıklarının tipik bir bilgisayar sisteminde tekil bir şekilde nasıl yürütüldüğü.

00:28.620 --> 00:34.100
Bu örnekte, T1, T2 ve T3 olmak üzere üç iş parçacığı olduğunu görebilirsiniz.

00:34.110 --> 00:38.940
Ve bilgisayar sisteminin sadece bir CPU kaynağına sahip olduğunu varsayalım, değil mi?

00:39.950 --> 00:44.810
Şimdi 18 eleman içeren bir dizi olduğunu varsayalım.

00:45.410 --> 00:48.800
30'a dizinin ilk altı elemanı atanır.

00:48.830 --> 00:53.930
T2 iş parçacığına dizinin ve iş parçacığının sonraki altı öğesi atanır.

00:53.960 --> 00:58.090
T3'e dizinin sonraki altı elemanı atanır.

00:58.100 --> 00:58.760
Doğru.

00:59.090 --> 01:04.970
Şimdi bildiğimiz gibi iplikler hiçbir şey değildir, ancak işçidirler ve işçilerin bazı işler yapması gerekir.

01:05.000 --> 01:08.630
Öyleyse bu konuların her birine iş atayalım.

01:09.910 --> 01:17.170
Diyelim ki T1, T2 ve T3 iş parçacığı kendilerine atanan dizinin altı elemanının toplamını hesaplamak

01:17.170 --> 01:18.370
zorunda.

01:18.370 --> 01:19.120
Doğru.

01:19.720 --> 01:24.340
Yani 31'in bir ve altı arasındaki elemanların toplamını hesaplaması gerekiyor.

01:24.370 --> 01:30.730
32'nin 7'den 12'ye kadar olan dizi elemanlarının toplamını hesaplaması beklenir.

01:30.760 --> 01:37.570
Ve benzer şekilde, 33'ün 13'ten 18'e kadar olan dizinin elemanlarının toplamını hesaplaması beklenir.

01:37.570 --> 01:38.260
Değil mi?

01:39.390 --> 01:46.020
Burada dikkat edilmesi gereken nokta, bu konuların her birine tahsis edilen işlerin çakışmayan işler olduğudur,

01:46.020 --> 01:46.800
değil mi?

01:47.040 --> 01:54.900
Dizinin t bir iş parçacığına ait hiçbir öğesine sistemdeki başka bir iş parçacığı tarafından erişilemez, işlenemez

01:54.900 --> 01:56.730
ya da manipüle edilemez.

01:56.730 --> 01:57.600
Değil mi?

01:57.630 --> 02:03.960
Yani bu basitçe, bu iş parçacıklarının her birine birbirinden tamamen bağımsız görevler atandığı anlamına

02:03.960 --> 02:04.830
gelir.

02:05.100 --> 02:12.360
Şimdi T1, T2 ve T3 iş parçacıklarının kendilerine atanan görevleri eşzamanlı bir şekilde nasıl yürüteceklerini

02:12.360 --> 02:13.560
görelim.

02:14.930 --> 02:22.310
Öyleyse, işletim sistemi tarafından CPU'yu alanın t iş parçacığı olduğunu varsayalım, değil mi?

02:22.430 --> 02:26.900
Böylece t bir iş parçacığı CPU'yu aldığında, t bir iş parçacığı çalışmaya başlar.

02:26.900 --> 02:31.520
Böylece kendisine atanan dizinin elemanlarının toplamını hesaplamaya başlayacaktır.

02:31.520 --> 02:32.210
Doğru.

02:32.240 --> 02:39.170
Şimdi t bir iş parçacığının bir, iki ve üç olan dizinin toplamını hesapladığını ve dizinin üç numaralı

02:39.170 --> 02:46.100
elemanına kadar olan elemanlarının toplamını hesapladığı anda işletim sisteminin t bir iş parçacığını

02:46.100 --> 02:50.300
CPU'dan çıkarmayı seçtiğini varsayalım.

02:50.330 --> 02:51.140
Doğru.

02:52.170 --> 02:53.670
Ve ipliği yükleyin.

02:53.710 --> 02:55.140
CPU'da T2.

02:55.170 --> 03:01.800
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.

03:01.830 --> 03:09.030
İşletim sisteminizin, iş parçacığı CPU üzerinde yeterli bir süre çalıştığında bağlam değiştirme

03:09.030 --> 03:12.750
gerçekleştirebileceğini unutmayın.

03:12.990 --> 03:19.110
Dolayısıyla, T1 iş parçacığı CPU'dan çıkarıldığında, işletim sistemi aslında bunu depolar.

03:19.110 --> 03:21.150
İş parçacığının yürütme durumu nedir?

03:21.180 --> 03:27.600
T1 Bu durumda T1 iş parçacığının yürütme durumu, T1 iş parçacığının üç numaralı elemana

03:27.600 --> 03:32.310
kadar dizinin bazı elemanlarını başarıyla tamamladığıdır.

03:32.340 --> 03:33.150
Değil mi?

03:33.630 --> 03:38.220
Buna t1 iş parçacığının bağlamının depolanması denir.

03:38.880 --> 03:42.030
Şimdi aynı alıştırma t2 ipliği ile tekrarlanır.

03:42.060 --> 03:48.810
Ş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

03:48.810 --> 03:53.290
ait dizinin elemanlarının toplamını hesaplayabilir.

03:53.320 --> 03:59.490
T2 iş parçacığının yedi, sekiz ve dokuzuncu öğelerin toplamını başarıyla hesapladığını varsayalım.

03:59.500 --> 04:06.940
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

04:06.940 --> 04:09.310
atamayı seçiyor.

04:09.490 --> 04:10.270
Doğru.

04:10.540 --> 04:16.960
Şimdi t1 ve t2 iş parçacığı işletim sisteminin zamanlama kuyruğunda beklemektedir.

04:17.170 --> 04:23.350
Dolayısıyla işletim sistemi, hazır kuyruğu veya zamanlama kuyruğu olarak adlandırdığımız bir kuyruk tutar.

04:23.530 --> 04:28.150
CPU bekleyen tüm iş parçacıkları bu kuyrukta bekleyecektir.

04:28.180 --> 04:29.020
Doğru.

04:29.650 --> 04:35.890
İş parçacığı çizelgeleme algoritmalarını incelerken bunu çok daha ayrıntılı olarak inceleyeceksiniz.

04:36.500 --> 04:43.850
Şimdi T3 iş parçacığına CPU atandığında, T3 iş parçacığı işini yapmaya başlayacaktır.

04:43.850 --> 04:48.950
Ve diyelim ki T3 iş parçacığı 13, 14 ve 15 dizilerinin elemanlarının toplamını

04:48.950 --> 04:54.100
başarıyla tamamladığında, işletim sistemi yine aynı şeyi yapar.

04:54.110 --> 04:58.400
CPU'yu T3 doğru iş parçacığından uzaklaştırır.

04:59.030 --> 05:05.240
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ş

05:05.240 --> 05:10.490
parçacığına ve ardından t2 iş parçacığından T3 iş parçacığına gerçekleştiğini görebilirsiniz.

05:10.520 --> 05:11.270
Doğru.

05:11.630 --> 05:17.870
Bu nedenle, T3 iş parçacığı hazır kuyruğuna yerleştirildiğinde, işletim sistemi hazır kuyruğundan ilk

05:17.870 --> 05:22.670
iş parçacığını alacak ve bu iş parçacığına tekrar bir CPU atamaya çalışacaktır.

05:23.530 --> 05:31.240
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

05:31.240 --> 05:36.310
gelir, bu nedenle şimdi dizinin öğelerinin toplamını hesaplamaya devam edecektir.

05:36.310 --> 05:42.400
Ve bu sefer T1 iş parçacığının kendisine atanan dizinin tüm elemanlarının toplamını tamamladığını

05:42.400 --> 05:43.900
varsayalım.

05:43.930 --> 05:44.770
Değil mi?

05:45.580 --> 05:49.600
Yani şimdi 31 görevini tamamladı, değil mi?

05:49.810 --> 05:53.200
Ve şimdi 31 kendini sonlandırmayı seçebilir.

05:54.300 --> 05:57.330
Benzer şekilde, 32'ye de CPU atanır.

05:57.330 --> 06:01.890
Ve 32'nin de bekleyen işini bitirdiğini varsayalım.

06:01.920 --> 06:07.320
Yani, 10, 11 ve 12 dizilerinin elemanlarının toplamını da hesaplar.

06:07.590 --> 06:09.370
Ve aynı şey iplik için de geçerli.

06:09.400 --> 06:11.280
33 sağ.

06:11.520 --> 06:15.420
Böylece tüm iş parçacıkları tekrar CPU'ya atanır.

06:15.780 --> 06:21.360
Böylece bu iş parçacıklarının birbirleriyle koordinasyon içinde çalıştığını görebilirsiniz.

06:21.360 --> 06:25.280
Ve bu koordinasyon tamamen işletim sistemi tarafından kontrol edilir.

06:25.290 --> 06:31.200
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

06:31.200 --> 06:33.900
karar veren işletim sisteminizdir.

06:33.900 --> 06:34.680
Doğru.

06:35.100 --> 06:42.000
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ı

06:42.000 --> 06:43.980
yürütülmesine bir örnektir.

06:44.010 --> 06:49.320
Tüm bu konuların ilerleme özelliğini gösterdiğini görebiliyorsunuz, değil mi?

06:49.350 --> 06:53.940
Her bir iplik kısmen de olsa işini yapıyordu, ama yapıyordu.

06:56.950 --> 07:03.340
Şimdi de iş parçacıklarının sistemde paralel bir şekilde nasıl çalıştığını tartışalım.

07:03.340 --> 07:04.000
Değil mi?

07:04.000 --> 07:09.010
Dolayısıyla sorun ifadesi hala aynıdır, sistemde üç iş parçacığı vardır ve her iş parçacığına gerçekleştirmesi

07:09.040 --> 07:12.670
için bazı görevler atanmıştır ve görev hiçbir şey değildir.

07:12.670 --> 07:17.860
Ancak bu iş parçacıklarının her biri kendi dizilerinin öğelerinin toplamını hesaplamak zorundadır.

07:18.220 --> 07:23.680
Şimdi, iş parçacıkları arasındaki paralelleştirmeyi gerçekleştirmek için sistemde daha fazla donanım kaynağına sahip

07:23.680 --> 07:24.700
olmanız gerekir.

07:24.700 --> 07:29.410
İşte bu nedenle bir CPU yerine artık üç CPU'nuz var.

07:29.440 --> 07:34.360
Diyelim ki bu CPU bir, bu CPU iki ve bu da CPU üç.

07:34.510 --> 07:35.350
Değil mi?

07:35.650 --> 07:41.710
Paralel yürütmenin daha fazla kaynak talep ettiğini ve böylece bu kaynakların kullanıcıları tarafından

07:41.710 --> 07:45.070
paralel olarak kullanıldığını zaten görmüştük.

07:45.070 --> 07:50.470
Yani bu durumda kaynaklar CPU'dur ve bu kaynağın kullanıcıları iş parçacıklarıdır.

07:50.770 --> 07:55.630
Dolayısıyla, iş parçacıklarının paralel yürütülmesi söz konusu olduğunda,

07:55.870 --> 08:03.880
işletim sistemi iş parçacığı bir CPU birde iş parçacığı ikiyi CPU ikide ve iş parçacığı üçü CPU'da programlayacaktır.

08:03.910 --> 08:05.200
Üç sağ.

08:06.330 --> 08:12.530
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.

08:12.570 --> 08:16.650
Konuların hiçbiri diğerinin çalışmasını ihlal etmez.

08:17.610 --> 08:24.210
İş parçacıklarından hiçbiri diğer iş parçacıklarının iş yürütmesinde herhangi bir engel oluşturmaz.

08:24.210 --> 08:26.760
Yani basitçe bu konuya tercüme edilir.

08:26.790 --> 08:34.470
T1 ve T2 ve tehdit T3 üç farklı CPU üzerinde paralel olarak çalışacaktır.

08:34.500 --> 08:35.250
Doğru.

08:35.930 --> 08:42.740
Bu nedenle, bir önceki ders videosunda tartıştığımız eşzamanlı örneğe kıyasla toplam işi çok daha

08:42.740 --> 08:46.160
hızlı tamamlayacaklarını söylemeye gerek yok.

08:47.450 --> 08:53.900
Paralelleştirmede hiçbir iş parçacığı CPU'yu engellemez veya sistemdeki diğer iş parçacıklarından alıkoymaz.

08:53.900 --> 08:54.740
Değil mi?

08:54.770 --> 09:01.100
Tüm iş parçacıkları, işlemlerini kendi CPU'larında paralel olarak mutlu bir şekilde yürütebilir.

09:02.800 --> 09:08.620
Ve çocuklar, şimdi son olarak tipik bir bilgisayar sisteminde birden fazla iş parçacığının nasıl tekil bir şekilde çalıştığını

09:08.620 --> 09:09.730
görelim.

09:09.730 --> 09:14.800
Dolayısıyla sorun ifadesi aynı kalmaktadır; üç iş parçacığı vardır ve bu iş parçacıklarının her birinin yapması

09:14.800 --> 09:16.310
gereken kendi işleri vardır.

09:16.330 --> 09:21.640
Şimdi bu üç iş parçacığının yürütülmesine tekillik kısıtlamalarını uygulayalım

09:21.640 --> 09:28.450
ve işletim sisteminin CPU'yu T1 iş parçacığına tahsis edeceğini fark edeceğiz.

09:28.450 --> 09:35.800
Ve t1 iş parçacığı işini tamamlayana kadar CPU'yu t1 iş parçacığından almayacaktır.

09:35.800 --> 09:36.430
Doğru.

09:36.430 --> 09:42.340
Yani bu, bağlam değiştirme olmadığı veya tekil yürütme modelinde iş parçacıklarının önceliği olmadığı

09:42.340 --> 09:43.780
anlamına gelir.

09:44.320 --> 09:45.070
Değil mi?

09:45.100 --> 09:48.790
Şimdi T1 iş parçacığının görevini tamamladığını varsayalım.

09:48.820 --> 09:54.580
Buradaki görev, dizinin T1 iş parçacığına atanan kısmının tüm öğelerinin toplamının hesaplanması

09:54.580 --> 09:55.750
anlamına gelir.

09:55.960 --> 10:02.990
Şimdi, T1 iş parçacığı bittiğinde, işletim sistemi CPU üzerinde başka bir iş parçacığı atayacaktır.

10:03.170 --> 10:03.920
Doğru.

10:04.190 --> 10:11.750
T2 iş parçacığı T1 iş parçacığı işini tamamlayana kadar bekledi ve şimdi T3 iş parçacığı T2 iş parçacığı

10:11.750 --> 10:14.420
işini tamamlayana kadar bekliyor.

10:14.420 --> 10:19.490
Yani bu, tekil iplik yürütme modelinde ilerleme olmadığı anlamına gelir.

10:20.170 --> 10:22.510
İlerleme yok.

10:22.660 --> 10:30.340
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

10:30.340 --> 10:34.610
CPU'yu nihayet t3 iş parçacığına tahsis edecektir.

10:34.630 --> 10:35.380
Doğru.

10:36.040 --> 10:40.210
Dolayısıyla, iş parçacıkları tekil olarak bu şekilde yürütülecektir.

10:40.210 --> 10:46.270
Bu örnekte, bir veya üç CPU'ya sahip olmanız gerçekten önemli değil, değil mi?

10:46.270 --> 10:52.420
Eğer üç CPU'nuz varsa, diğer iki CPU boşa gidecekti, değil mi?

10:53.640 --> 10:55.950
Hiç kullanılmıyorlar.

10:57.210 --> 11:03.630
Yani bu basitçe, tekil iş parçacığı yürütme modasının gerçek dünyada var olmadığı anlamına gelir.

11:04.520 --> 11:08.120
Ya eşzamanlılık ya paralellik ya da her ikisi de vardır.

11:08.120 --> 11:13.310
Ancak iş parçacıklarının tekil bir şekilde yürütülmesi pratik dünyada gerçekten mevcut değildir.

11:13.910 --> 11:21.170
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

11:21.170 --> 11:27.050
ç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ı

11:27.050 --> 11:32.090
olarak yürütülmesinde geçen süreden daha az olduğu sonucuna varabiliriz.

11:32.120 --> 11:32.980
Doğru.

11:33.050 --> 11:39.740
Bu denklemin arkasındaki mantığı daha önce açıklamıştım; iş parçacıklarının eşzamanlı yürütülmesinde,

11:39.740 --> 11:45.410
yalnızca iş parçacıkları arasında bağlam geçişi yapılırken çok fazla zaman harcanır.

11:45.620 --> 11:50.240
Bağlam değiştirmenin pahalı bir işlem olduğunu unutmayın.

11:50.570 --> 11:57.920
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

11:57.950 --> 12:00.380
olmadığı sorusu ortaya çıkmaktadır.

12:00.530 --> 12:07.110
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ı

12:07.110 --> 12:08.930
yürütme yoludur.

12:08.940 --> 12:09.690
Değil mi?

12:09.720 --> 12:15.990
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ı

12:15.990 --> 12:19.150
yürütülmesini destekleyen hibrit sistemlerdir.

12:19.170 --> 12:19.860
Doğru.

12:19.860 --> 12:21.570
Peki bunu neden yapmamız gerekiyor?

12:21.580 --> 12:24.300
Bunu bir sonraki ders videosunda tartışalım.
