WEBVTT

1
00:04.050 --> 00:11.550
Şimdi de asenkron programlama ortamında
erken silme işlemini

2
00:11.550 --> 00:12.990
ele alan bir sonraki tasarım modeliyle
başlayalım.

3
00:13.410 --> 00:20.370
Bu yüzden öncelikle erken silmenin ne
olduğunu anlamaya çalışalım:

4
00:20.370 --> 00:28.350
erken silme, yakın gelecekte nesne
üzerinde çalışması planlanan görevler

5
00:28.350 --> 00:29.070
varken bir veri nesnesini sistemden silmek
anlamına gelir.

6
00:29.870 --> 00:30.590
Doğru.

7
00:30.590 --> 00:35.030
Diyelim ki bir D veri yapınız var ve.

8
00:35.860 --> 00:42.070
Bir olay döngüsü ortamında veya asenkron
programlama ortamında, olay döngüsü iş
parçacığı

9
00:42.100 --> 00:49.000
üzerinde zaten zamanladığınız T bir, T iki
veya görev üç üç diyelim

10
00:49.000 --> 00:53.500
ve bu görevler bu veri yapısı nesnesi
üzerinde bazı işlemler gerçekleştirir.

11
00:54.790 --> 00:56.170
Ama bir şekilde.

12
00:57.210 --> 01:00.120
Sildiniz veya serbest bıraktınız.

13
01:01.090 --> 01:02.470
Bu veri yapısı.

14
01:02.470 --> 01:02.800
De.

15
01:03.430 --> 01:09.400
Halihazırda zamanlanmış ve de veri yapısı
üzerinde bir

16
01:09.400 --> 01:10.120
işlem gerçekleştirmek için bekleyen
görevler olmasına rağmen.

17
01:11.140 --> 01:18.370
Peki olay döngüsü T1, T2 ve T3 görevlerini
yürütmek üzere zamanladığında ne olacak?
T1

18
01:19.080 --> 01:28.260
görevi, T2 görevi veya T3 görevi sarkan
bir işaretçi kullanarak belleğe erişmeye
çalışacaktır.

19
01:29.610 --> 01:30.060
Tamam.

20
01:30.060 --> 01:33.570
D veri yapısının adresi artık geçerli
değildir.

21
01:33.630 --> 01:36.270
Ve sarkan bir işaretçi haline gelir.

22
01:36.870 --> 01:39.540
Sonuç olarak, programınız çökebilir.

23
01:40.740 --> 01:41.310
Tamam.

24
01:41.310 --> 01:46.620
Dolayısıyla, erken silme sorunu eşzamanlı
olan her ortamın doğasında vardır.

25
01:46.620 --> 01:52.860
Erken silme sorununu tek iş parçacıklı eş
zamanlı bir ortamda
gerçekleştirebilirsiniz.

26
01:52.860 --> 01:56.940
Böyle bir ortam bir olay döngüsü iş
parçacığından sorumludur.

27
01:57.650 --> 02:03.740
Ya da çoklu iş parçacığı kavramıyla
oluşturulan çok iş parçacıklı eşzamanlı
bir ortam.

28
02:03.770 --> 02:09.020
Sistemde birden fazla iş parçacığı varsa,
ortamınız çok iş parçacıklı eşzamanlıdır.

29
02:09.530 --> 02:13.250
STP sürecimiz tek iş parçacıklı eş zamanlı
bir ortamdır.

30
02:14.150 --> 02:21.140
STP sürecimiz tek iş parçacıklıdır çünkü
mantıksal olarak tüm işlemleri
gerçekleştirmekten sorumlu

31
02:21.140 --> 02:23.750
olan tek bir iş parçacığı vardır ve bu da
Eventloop iş parçacığıdır.

32
02:23.930 --> 02:27.800
Ve eşzamanlıdır çünkü görevler arasında
geçiş yaparız.

33
02:28.160 --> 02:33.710
Şimdi bir örnek yardımıyla bu erken silme

34
02:33.710 --> 02:35.030
sorununu biraz daha ayrıntılı olarak
anlamaya çalışalım.

35
02:35.690 --> 02:44.330
Diyelim ki STP sürecimizde TC adında bir

36
02:44.330 --> 02:45.290
görev yürütüyoruz ve bu görev işlemini
gerçekleştiriyor.

37
02:46.030 --> 02:48.670
Şimdi operasyonunu gerçekleştirmenin bir
parçası olarak.

38
02:48.670 --> 02:52.510
Diyelim ki T1 görevi yeni bir yönlendirme
tablosu girişi oluşturuyor.

39
02:53.020 --> 02:56.350
Peter ise bu yönlendirme tablosu girişine
bir işaretçiyi temsil eder.

40
02:57.600 --> 03:04.410
Tamam o zaman görev TC, yeni oluşturulan
yönlendirme tablosu girişini yönlendirme
tablosuna ekleyin.

41
03:04.680 --> 03:05.970
Yani burada bir sorun yok.

42
03:05.970 --> 03:07.110
Her şey yolunda.

43
03:08.010 --> 03:14.130
Şimdi TC görevi bu yönlendirme tablosu
girişinin sona erme zamanlayıcısını da
başlatır.

44
03:15.260 --> 03:15.950
Tamam.

45
03:16.190 --> 03:16.760
Yine mi?

46
03:16.760 --> 03:17.660
Sorun değil.

47
03:19.000 --> 03:24.790
Şimdi DC görevi API kullanarak başka bir T
görevini zamanlıyor.

48
03:25.780 --> 03:29.260
Görev zaten kullanmakta olduğumuz yeni bir
iş yaratır.

49
03:29.590 --> 03:35.140
Böylece DC görevi yeni bir T as görevi
oluşturur ve bunu bir olay döngüsü iş
parçacığı üzerinde zamanlar.

50
03:35.630 --> 03:39.920
Görevin amacı da bu.

51
03:40.510 --> 03:44.980
Serileştirilir ve yönlendirme tablosu
girişini uzak bir makineye gönderir.

52
03:45.610 --> 03:50.440
BTS görevini bu dersin bir önceki
bölümünde ödevin bir parçası olarak zaten
uygulamıştık.

53
03:51.460 --> 03:51.970
Tamam.

54
03:51.970 --> 03:55.180
İşte TC, BTS'i planlıyor.

55
03:56.050 --> 03:58.450
TC, yürütülmekte olan geçerli görevdir.

56
03:58.480 --> 04:02.440
BTS, bir olay döngüsü kuyruğunda
zamanlanan yeni görevdir.

57
04:02.800 --> 04:09.490
TC görevi yürütülmesini tamamlar
tamamlamaz, olay döngüsü iş parçacığı T
görevini devralacaktır.

58
04:09.490 --> 04:11.050
İnfaza gelince.

59
04:11.630 --> 04:14.720
Diyelim ki bu olay döngüsü kuyruğu.

60
04:15.240 --> 04:19.890
Ve bu işaret üzerine t as görevi tc görevi
tarafından yerleştirilmiştir.

61
04:21.550 --> 04:22.210
Tamam.

62
04:24.460 --> 04:30.190
Şimdi diyelim ki bu yönlendirme tablosu
girdisi için süre dolum zamanlayıcısı
ateşlendi.

63
04:30.760 --> 04:36.130
Böylece zamanlayıcı ateşlendiğinde, olay
döngüsü kuyruğuna yeni bir görev
yerleştiririz.

64
04:36.730 --> 04:37.180
Bırak.

65
04:37.180 --> 04:39.130
Bu görev TD olarak adlandırılır.

66
04:40.100 --> 04:47.090
Dolayısıyla TD görevinin amacı yönlendirme
tablosu girişini silmektir

67
04:47.510 --> 04:49.040
ve TD görevi olay döngüsü kuyruğuna
yerleştirilir.

68
04:50.050 --> 04:52.960
Yönlendirme tablosu girişinin zamanlayıcı
iş parçacığı tarafından.

69
04:53.920 --> 04:57.280
Bunu SDP sürecimizde de zaten uyguladık.

70
04:58.090 --> 05:04.090
Şimdi bu noktada, bir olay döngüsü
kuyruğunda RTS ve TD olmak üzere iki
görevimiz var.

71
05:05.650 --> 05:06.340
Tamam.

72
05:07.070 --> 05:15.110
Şimdi, erken silme sorununu
gerçekleştirmek için,

73
05:15.110 --> 05:16.250
DC görevinin yürütülmesini tamamladığını
varsayalım.

74
05:17.240 --> 05:18.200
Ve.

75
05:18.840 --> 05:24.270
Ve şimdi olay döngüsü iş parçacığı yürütme
için bir sonraki görev ağacını alır.

76
05:25.260 --> 05:32.070
Bu nedenle, erken silme sorununu
gerçekleştirmek için, olay döngüsü iş

77
05:32.100 --> 05:35.070
parçacığının yürütme için bir sonraki
görev ağacını almasını sağlamalıyız.

78
05:35.070 --> 05:44.130
Bu yüzden görev ağacını olay döngüsü
kuyruğundan çıkaralım

79
05:44.130 --> 05:45.450
ve görev ağacı çalıştığında aşağıdaki
işlemi gerçekleştirsin.

80
05:45.600 --> 05:49.260
Yönlendirme tablosundan bir yönlendirme
tablosu girişi algılar.

81
05:50.850 --> 05:53.070
Ve yönlendirme tablosu girişini serbest
bırakır.

82
05:54.270 --> 05:54.930
Tamam.

83
05:55.990 --> 05:57.700
Yani görevin amacı buydu.

84
05:57.730 --> 05:58.270
TD.

85
06:00.030 --> 06:07.260
Ve 3D görevi yürütülmesini tamamladığında
olay döngüsü iş parçacığı şimdi Olay

86
06:07.260 --> 06:10.080
Döngüsü kuyruğundan bir sonraki görevi,
yani D s görevini alacaktır.

87
06:11.330 --> 06:14.570
Ve görev ekipleri artık amaçlanan işlemi
gerçekleştirecektir.

88
06:15.790 --> 06:21.280
BTS görevinin yönlendirme tablosu girişini
serileştirmesi ve ağ üzerinden uzak

89
06:21.280 --> 06:27.640
makineye göndermesi gerekiyordu ve bu
nedenle BTS görevinin bu

90
06:27.640 --> 06:29.020
işaretçi tarafından işaret edilen nesne
üzerinde işlem gerçekleştirmesi
gerekiyordu.

91
06:29.780 --> 06:33.710
Ancak önceki adımda bu işaretçinin zaten
serbest bırakılmış olduğunu
görebilirsiniz.

92
06:34.200 --> 06:38.730
Yani bu, bu işaretçinin zamanın bu
noktasında sarkık hale geldiği anlamına
gelir.

93
06:40.190 --> 06:41.270
T'yi görevlendir.

94
06:41.270 --> 06:48.800
S, sarkan bir işaretçi üzerinde işlem
yapmaya çalışır ve bu nedenle STP
uygulamanız çökebilir.

95
06:50.280 --> 06:50.880
Tamam.

96
06:51.950 --> 06:57.620
Dolayısıyla, STP sürecimizde bu olaylar
dizisi meydana gelirse,

97
06:57.620 --> 06:58.610
STP sürecimizin çok iyi bir şekilde
çökebileceğini görebilirsiniz.

98
06:58.640 --> 07:04.010
Ancak, bu olay dizilerini isteğe bağlı
olarak oluşturmak çok zordur.

99
07:04.720 --> 07:09.910
Bu nedenle, bu çökmeyi yeniden oluşturmaya
çalışırsanız, çok zor olacaktır ve
muhtemelen başarılı olamayabilirsiniz.

100
07:10.060 --> 07:15.190
Ancak burada açıkladığım gibi, sarkan
işaretçi sorunu her zaman vardır.

101
07:15.860 --> 07:22.340
Bu nedenle, sarkan işaretçi veya erken
silme sorununu daha genel bir şekilde

102
07:22.340 --> 07:28.340
tartışmak için, tek iş parçacıklı
eşzamanlı uygulamanızda zamanın bir
noktasında olduğunu varsayabilirsiniz.

103
07:28.340 --> 07:35.060
Olay döngüsü iş parçacığında zamanlanan D
bir, T

104
07:35.060 --> 07:36.020
iki ve D üç görevleriniz olduğunu
varsayalım.

105
07:36.500 --> 07:42.440
Ve bu üç görevin de aynı veri nesnesi

106
07:42.440 --> 07:43.790
D üzerinde kendi işlemlerini
gerçekleştirmeyi amaçladığını varsayalım.

107
07:44.750 --> 07:45.500
Görev.

108
07:45.500 --> 07:52.130
Üç üç, T üç görevinin bir nesne üzerinde

109
07:52.130 --> 07:52.910
silme işlemi gerçekleştirmesi anlamında
özel bir görevdir.

110
07:54.460 --> 08:02.410
Bu nedenle, T üç görevi t bir ve t iki
görevlerinden önce

111
08:02.410 --> 08:05.260
olay döngüsü iş parçacığı tarafından
zamanlanırsa, sarkan işaretçi sorununa yol
açacaktır.

112
08:06.110 --> 08:13.340
T üç görevi T veri nesnesini serbest
bıraktıktan veya yok

113
08:13.340 --> 08:15.170
ettikten sonra, gelecekte yani T üç görevi
bittikten sonra.

114
08:15.170 --> 08:21.470
Olay döngüsü iş parçacığı t1 veya t2
görevini yürütme için zamanladığında,
bunlar

115
08:21.470 --> 08:25.610
sarkan işaretçi tarafından işaret edilen
bir nesne üzerinde ilgili işlemi
gerçekleştirmeye çalışacaktır.

116
08:26.640 --> 08:27.510
Tamam.

117
08:28.110 --> 08:33.180
Ya da başka bir deyişle, şu anda var
olmayan bir nesne üzerinde işlem yapmaya
çalışırlar.

118
08:33.630 --> 08:36.690
Yani bu, erken silme işlemine bir
örnektir.

119
08:36.870 --> 08:42.900
Yani erken silme, zaten zamanlanmış
görevler varken bir veri nesnesinin
sistemden silinmesi anlamına gelir.

120
08:43.860 --> 08:50.100
Sistemde ve bu görevler bu veri nesnesi
üzerinde bazı işlemler gerçekleştirmek
istiyor.

121
08:51.120 --> 08:56.850
Dolayısıyla, eşzamansız eşzamanlı
programlama dünyasında, erken silme sorunu
çok yaygındır.

122
08:57.150 --> 09:03.180
Ve neyse ki, erken silme sorununu ele
almak için çok zarif bir yöntem var.

123
09:03.480 --> 09:06.870
Umarım erken silme sorununu
açıklayabilmişimdir.

124
09:06.870 --> 09:12.930
Şimdi de bu erken silme sorunuyla nasıl
başa çıkacağınızı tartışacağız.

125
09:12.930 --> 09:19.710
Sadece tek iş parçacıklı eşzamanlı
programlamada değil, çok iş parçacıklı

126
09:19.710 --> 09:24.330
eşzamanlı programlamada da nesnelerin
erken silinmesi sorunuyla
karşılaşacağınızı unutmayın.

127
09:24.330 --> 09:30.150
Tartışacağımız çözüm her iki programlama
ortamında da uygulanabilir, yani

128
09:30.570 --> 09:34.440
tek iş parçacıklı eşzamanlılık veya çok iş
parçacıklı eşzamanlılık.


