در این مطلب، ویدئو جس شاپیرو – همه چیز در یک زمان: بسیاری از مدل های همزمان پایتون – PyCon 2019 با زیرنویس فارسی را برای دانلود قرار داده ام. شما میتوانید با پرداخت 15 هزار تومان ، این ویدیو به علاوه تمامی فیلم های سایت را دانلود کنید.اکثر فیلم های سایت به زبان انگلیسی می باشند. این ویدئو دارای زیرنویس فارسی ترجمه شده توسط هوش مصنوعی می باشد که میتوانید نمونه ای از آن را در قسمت پایانی این مطلب مشاهده کنید.
مدت زمان فیلم: 00:25:44
تصاویر این ویدئو:
قسمتی از زیرنویس این فیلم:
00:00:01,190 –> 00:00:03,330
بعدازظهر همگی بخیر و به
2
00:00:03,330 –> 00:00:05,930
ارائه بعدی ما در PyCon 2019 خوش آمدید،
3
00:00:05,930 –> 00:00:08,490
ما ژستی داریم که پیروت
4
00:00:08,490 –> 00:00:09,960
در مورد مدل های همزمانی پایتون صحبت می کند، لطفاً
5
00:00:09,960 –> 00:00:20,039
به او احساس خوش آمدید بدهید، ممنون که امروز آمدید،
6
00:00:20,039 –> 00:00:21,840
مثل اینکه گفتید نام من جس است
7
00:00:21,840 –> 00:00:23,880
و امروز در مورد آن صحبت خواهیم کرد.
8
00:00:23,880 –> 00:00:26,340
پنج تا از پایتونها
9
00:00:26,340 –> 00:00:28,439
مدلهای مختلف همزمانی و برخی از
10
00:00:28,439 –> 00:00:30,330
ویژگیهایی که آنها را متفاوت میکند
11
00:00:30,330 –> 00:00:31,800
و شرایطی که ممکن است بخواهید
12
00:00:31,800 –> 00:00:35,040
از آنها استفاده کنید تا همزمانی را شروع کنید.
13
00:00:35,040 –> 00:00:37,530
14
00:00:37,530 –> 00:00:39,000
15
00:00:39,000 –> 00:00:41,969
توضیح رایج این
16
00:00:41,969 –> 00:00:44,010
است که همزمانی زمانی اتفاق میافتد که
17
00:00:44,010 –> 00:00:46,350
چندین کار را همزمان انجام میدهید، اما نوعی
18
00:00:46,350 –> 00:00:47,600
19
00:00:47,600 –> 00:00:50,039
همزمانی سادهسازی در واقع این ایده است که
20
00:00:50,039 –> 00:00:52,530
ما میتوانیم برنامههایمان را به قطعاتی تقسیم
21
00:00:52,530 –> 00:00:54,809
کنیم که به طور مستقل اجرا شوند و از
22
00:00:54,809 –> 00:00:56,969
مزایای جانبی بهره ببریم. وقتی قطعاتی از یک
23
00:00:56,969 –> 00:00:59,039
برنامه داریم که میتوانند به طور مستقل اجرا شوند،
24
00:00:59,039 –> 00:01:00,539
میتوانیم آنها را همزمان اجرا کنیم و
25
00:01:00,539 –> 00:01:03,750
مزایایی مانند عملکرد از آن به دست آوریم، بنابراین
26
00:01:03,750 –> 00:01:05,369
موافق باشید. پس rency فقط چیزی نیست
27
00:01:05,369 –> 00:01:08,760
که شما آن را روشن یا خاموش کنید، بلکه چیزی است
28
00:01:08,760 –> 00:01:11,220
که کیفی تر است و بنابراین امروز
29
00:01:11,220 –> 00:01:12,600
ما در مورد برخی
30
00:01:12,600 –> 00:01:15,210
از چیزهایی صحبت خواهیم کرد که در شرایط مختلف کیفیت
31
00:01:15,210 –> 00:01:16,860
های متفاوتی را به مدل های همزمان
32
00:01:16,860 –> 00:01:18,780
مختلف می دهند و چرا ممکن است
33
00:01:18,780 –> 00:01:22,350
بخواهیم هر مدل را انتخاب کنید،
34
00:01:22,350 –> 00:01:24,390
در پایتون گزینههای زیادی وجود دارد، اما امروز
35
00:01:24,390 –> 00:01:25,350
ما فقط در مورد
36
00:01:25,350 –> 00:01:29,579
پنج روال همگام ورودی/خروجی صحبت میکنیم.
37
00:01:29,579 –> 00:01:33,180
رشتههای
38
00:01:33,180 –> 00:01:36,390
39
00:01:36,390 –> 00:01:38,250
40
00:01:38,250 –> 00:01:42,540
پایتون. بنابراین اولین
41
00:01:42,540 –> 00:01:43,530
اصلی که ما در مورد آن صحبت خواهیم کرد
42
00:01:43,530 –> 00:01:47,549
موازی گرایی است که دوباره همان چیزی است که بسیاری
43
00:01:47,549 –> 00:01:49,140
از افراد با همزمانی مرتبط
44
00:01:49,140 –> 00:01:51,360
45
00:01:51,360 –> 00:01:53,640
می دانند و چند سوال اصلی وجود دارد که می خواهید وقتی کارها را همزمان انجام می دهیم از خود بپرسید
46
00:01:53,640 –> 00:01:55,890
آیا آنها واقعاً
47
00:01:55,890 –> 00:01:58,680
همزمان اتفاق می افتند. پروکسی
48
00:01:58,680 –> 00:02:00,930
برای این سوال این است که
49
00:02:00,930 –> 00:02:03,049
وقتی CPU های بیشتری را اضافه می کنید،
50
00:02:03,049 –> 00:02:06,149
اگر به گرافیک سمت چپ
51
00:02:06,149 –> 00:02:11,510
یا راست و نه سمت چپ نگاه کنید، عملکرد چگونه مقیاس می شود. مدل دستی
52
00:02:11,510 –> 00:02:13,730
53
00:02:13,730 –> 00:02:16,610
فقط همزمانی را ارائه میدهد که واقعاً موازی
54
00:02:16,610 –> 00:02:19,340
نیست، میتوانید ببینید که هر یک از آن وظایف به طور مستقل اجرا میشوند،
55
00:02:19,340 –> 00:02:22,040
اما هیچکدام از آنها نمیتوانند
56
00:02:22,040 –> 00:02:23,510
آن را در همان زمان اجرا کنند،
57
00:02:23,510 –> 00:02:25,489
در مقایسه مدل همزمانی
58
00:02:25,489 –> 00:02:27,409
سمت راست واقعاً موازی است، میتوانید ببینید
59
00:02:27,409 –> 00:02:28,819
که به تعداد زیادی سه
60
00:02:28,819 –> 00:02:31,340
اتفاق مختلف در یک زمان در حال رخ دادن است، به
61
00:02:31,340 –> 00:02:32,780
این معنی نیست که مدل های همزمانی که
62
00:02:32,780 –> 00:02:34,940
موازی نیستند مفید نیستند زیرا
63
00:02:34,940 –> 00:02:36,739
همزمانی توانایی تجزیه
64
00:02:36,739 –> 00:02:39,470
یک برنامه به قطعات است حتی مدل هایی که
65
00:02:39,470 –> 00:02:41,810
موازی سازی واقعی را به ما نمی دهند می توان
66
00:02:41,810 –> 00:02:45,890
از آنها استفاده کرد. یک مزیت بزرگ، اصل دومی
67
00:02:45,890 –> 00:02:47,150
که میخواهم در مورد آن صحبت کنم،
68
00:02:47,150 –> 00:02:49,370
حداقل واحد برنامهریزیشده است و
69
00:02:49,370 –> 00:02:50,450
اگر در
70
00:02:50,450 –> 00:02:53,569
گوگل سرچ کنید این کد از
71
00:02:53,569 –> 00:02:56,660
تکههای معنایی منفرد تشکیل شده است و بسته
72
00:02:56,660 –> 00:02:58,310
به نحوه اجرای آن تکهها، رفتار
73
00:02:58,310 –> 00:03:00,260
متفاوتی دارند، با مشکل زیادی مواجه خواهید شد. درست مانند یک
74
00:03:00,260 –> 00:03:03,590
بلوک مجزای 32 بیتی که میتواند یک
75
00:03:03,590 –> 00:03:06,890
عدد صحیح مثبت باشد، میتواند یک دستورالعمل x86
76
00:03:06,890 –> 00:03:08,629
باشد، میتواند یک عدد ممیز شناور منفی
77
00:03:08,629 –> 00:03:10,910
یا حتی میتواند یک شکلک
78
00:03:10,910 –> 00:03:13,790
شکلک باشد. من حتی وقتی در مورد
79
00:03:13,790 –> 00:03:16,849
کد پایتون خالص صحبت می کنیم، نحوه اجرای
80
00:03:16,849 –> 00:03:18,739
کد بسیار مهم است و نحوه
81
00:03:18,739 –> 00:03:22,250
رفتارها
82
00:03:22,250 –> 00:03:25,519
83
00:03:25,519 –> 00:03:29,180
را تغییر می دهد.
84
00:03:29,180 –> 00:03:30,620
85
00:03:30,620 –> 00:03:32,870
هسته سیستم عامل یا مفسر پایتون
86
00:03:32,870 –> 00:03:34,880
که می تواند به طور کامل
87
00:03:34,880 –> 00:03:38,000
اجرا شود و کنترل را به زمانبند برمی گرداند
88
00:03:38,000 –> 00:03:41,560
تا کار بعدی را انجام
89
00:03:41,620 –> 00:03:43,730
دهد. اصل سومی که می خواهم در مورد آن صحبت کنم
90
00:03:43,730 –> 00:03:47,269
اشتراک گذاری و جداسازی داده ها است و
91
00:03:47,269 –> 00:03:49,639
اولین سوال این است که چقدر جداسازی
92
00:03:49,639 –> 00:03:51,470
مورد نیاز است. اگر من یک
93
00:03:51,470 –> 00:03:54,230
تکه از حالت جهانی داشته باشم که در
94
00:03:54,230 –> 00:03:56,000
یکی از وظایف خود تغییر می دهم، بنابراین بخشی از
95
00:03:56,000 –> 00:03:59,329
برنامه من این است که تغییر حالت جهانی
96
00:03:59,329 –> 00:04:02,919
در سایر وظایف همزمان من منعکس می شود
97
00:04:02,919 –> 00:04:06,769
اگر من یک قطعه داده را بدست آوریم و این
98
00:04:06,769 –> 00:04:09,859
مثال کلاسیک است برنامه من یک
99
00:04:09,859 –> 00:04:11,840
بانک است و من به موجودی حساب بانکی نگاه می کنم
100
00:04:11,840 –> 00:04:14,810
تا چه مدت این داده ها
101
00:04:14,810 –> 00:04:18,589
خوب می مانند.
102
00:04:18,589 –> 00:04:20,238
103
00:04:20,238 –> 00:04:23,090
و در نهایت از چه
104
00:04:23,090 –> 00:04:25,610
ابزارهایی می توان برای به اشتراک گذاشتن داده ها در
105
00:04:25,610 –> 00:04:27,540
مدل هایی استفاده کرد که در آن
106
00:04:27,540 –> 00:04:29,280
حالتی وجود دارد که به طور پیش فرض به اشتراک گذاشته شده است، این
107
00:04:29,280 –> 00:04:30,870
ابزارها معمولاً مواردی مانند
108
00:04:30,870 –> 00:04:33,780
قفل یا پرچم هستند که به ما امکان می دهند از ثبات اطمینان حاصل کنیم
109
00:04:33,780 –> 00:04:35,820
در واقع
110
00:04:35,820 –> 00:04:38,660
همزمانی برنامه ما را در
111
00:04:38,660 –> 00:04:40,950
مقایسه با مدل ها کاهش می دهد. که
112
00:04:40,950 –> 00:04:43,380
دادهها را بهطور پیشفرض به اشتراک نمیگذارند، اینها ابزارهایی هستند
113
00:04:43,380 –> 00:04:45,270
که به ما امکان میدهند دادهها را بین
114
00:04:45,270 –> 00:04:48,060
وظایفی که
115
00:04:48,060 –> 00:04:52,380
باید از آنها آگاه باشیم،
116
00:04:52,380 –> 00:04:55,980
جابهجا کنیم.
117
00:04:55,980 –> 00:04:59,880
ioco روتینها فقط یک
118
00:04:59,880 –> 00:05:01,800
روال مشترک را در یک زمان اجرا میکند،
119
00:05:01,800 –> 00:05:04,920
بنابراین ما میدانیم که در هر کد غیرهمگام i/o
120
00:05:04,920 –> 00:05:07,830
، مدل همزمانی یک مدل موازی نیست، در
121
00:05:07,830 –> 00:05:11,880
عوض هر روال Co
122
00:05:11,880 –> 00:05:14,880
به طور منظم به حلقه رویداد تسلیم میشود.
123
00:05:14,880 –> 00:05:18,210
حداقل واحد زمانبندی
124
00:05:18,210 –> 00:05:21,300
شده وزن همه بلوکها است و
125
00:05:21,300 –> 00:05:22,950
حالت کلی در هر یک
126
00:05:22,950 –> 00:05:27,300
از وزن همه بلوکها سازگار است، اگر
127
00:05:27,300 –> 00:05:28,470
به نمونه کد روی صفحه نگاه کنید،
128
00:05:28,470 –> 00:05:31,800
میتوانید یک بلوک دوگانه را به صورت
129
00:05:31,800 –> 00:05:33,990
تعریف کنیم. بخش کد
130
00:05:33,990 –> 00:05:36,630
بین شروع فراخوانی تابع یا
131
00:05:36,630 –> 00:05:38,280
شروع فراخوانی یک روال KO و
132
00:05:38,280 –> 00:05:40,860
اولین عبارت وزن در
133
00:05:40,860 –> 00:05:43,950
روال مشترک یا فاصله بین هر
134
00:05:43,950 –> 00:05:47,340
دستور وزن پس از آن
135
00:05:47,340 –> 00:05:49,080
مهم نیست که در این بین چه کاری انجام دهیم. این
136
00:05:49,080 –> 00:05:51,000
عبارات را
137
00:05:51,000 –> 00:05:52,710
به حلقه رویداد تسلیم نمیکنیم و بنابراین میتوانیم
138
00:05:52,710 –> 00:05:55,080
از سازگاری دادهها اطمینان داشته باشیم، ممکن
139
00:05:55,080 –> 00:05:57,600
است یک بیانیه چاپی ایجاد کنیم که ممکن است به طور
140
00:05:57,600 –> 00:06:00,960
همزمان در داخل رشته بخوابیم و اگر منتظر نباشیم ممکن
141
00:06:00,960 –> 00:06:03,930
است بیش از 10000 بار مختلف حلقه
142
00:06:03,930 –> 00:06:06,450
بزنیم. پس ما هنوز
143
00:06:06,450 –> 00:06:07,830
در یک پیاده روی هستیم و همچنان
144
00:06:07,830 –> 00:06:10,710
در مقایسه با یکدیگر ثابت هستیم به محض
145
00:06:10,710 –> 00:06:13,230
اینکه یک بیانیه انتظار یا تماس
146
00:06:13,230 –> 00:06:15,840
با روال دیگر شرکت برقرار می کنیم، این ثبات را از دست می
147
00:06:15,840 –> 00:06:18,030
دهیم زیرا به
148
00:06:18,030 –> 00:06:22,950
حلقه رویداد در یک حلقه جدید تسلیم شده ایم. بلوکی که
149
00:06:22,950 –> 00:06:27,240
به طور مستقل برنامه ریزی شده است و اکنون
150
00:06:27,240 –> 00:06:30,090
حلقه رویداد در async i/o اساساً
151
00:06:30,090 –> 00:06:33,150
اطلاعاتی را در مورد کاری که
152
00:06:33,150 –> 00:06:34,890
هر Kirti باید انجام دهد دریافت می کند که می
153
00:06:34,890 –> 00:06:37,620
تواند فایلی را باز کند
154
00:06:37,620 –> 00:06:39,450
که می تواند مدت زمان معینی منتظر بماند یا در
155
00:06:39,450 –> 00:06:41,759
حال نوشتن باشد. در یک سوکت
156
00:06:41,759 –> 00:06:44,549
شبکه، حلقه رویداد آن کار را
157
00:06:44,549 –> 00:06:47,009
برای انجام آماده میکند و پس از آماده شدن
158
00:06:47,009 –> 00:06:51,569
و تکمیل شدن آن کار، دوباره وارد روال Coe میشود
159
00:06:51,569 –> 00:06:56,219
که در حال انجام بود، در اینجا
160
00:06:56,219 –> 00:06:58,919
چند نمونه کد دیگر در سمت چپ است، ما یک
161
00:06:58,919 –> 00:07:00,599
مثال از دو داریم.
162
00:07:00,599 –> 00:07:02,009
تیم های Coe با مهندسی بسیار خوب که به خوبی
163
00:07:02,009 –> 00:07:03,149
با
164
00:07:03,149 –> 00:07:06,389
هم کار می کنند روش بالا فقط یک
165
00:07:06,389 –> 00:07:07,949
شمارنده را افزایش می دهد که بین روش ها به اشتراک گذاشته می
166
00:07:07,949 –> 00:07:10,199
شود هر ده دهم ثانیه
167
00:07:10,199 –> 00:07:12,619
و آن پایین اساساً فقط وارد
168
00:07:12,619 –> 00:07:15,479
می شود اطلاعات مربوط به جایی که
169
00:07:15,479 –> 00:07:17,610
شمارنده در ابتدا قرار دارد را به دست می آورد 30 می خوابد.
170
00:07:17,610 –> 00:07:19,110
ثانیه به صورت ناهمزمان و
171
00:07:19,110 –> 00:07:20,879
اطلاعاتی در مورد جایی که شمارنده در انتهای آن قرار دارد به دست می آورد
172
00:07:20,879 –> 00:07:23,369
و چون هر
173
00:07:23,369 –> 00:07:25,619
دهم ثانیه را زمان می بریم و حدود 30 ثانیه منتظر می مانیم
174
00:07:25,619 –> 00:07:27,989
شمارنده باید
175
00:07:27,989 –> 00:07:30,539
در
176
00:07:30,539 –> 00:07:33,089
مقایسه با سمت راست حدود 300 برابر شود، عملکرد چاپ و
177
00:07:33,089 –> 00:07:35,849
همگام سازی خواب بسیار است. مشابه است، اما
178
00:07:35,849 –> 00:07:37,259
چون هرگز به حلقه رویداد
179
00:07:37,259 –> 00:07:39,869
تسلیم نمی شود، در عوض با استفاده از تابع خواب نقطه زمانی
180
00:07:39,869 –> 00:07:43,319
فراخوانی می کند، به این معنی است که
181
00:07:43,319 –> 00:07:45,589
روال مشترک دیگر هرگز دریافت نمی شود.
182
00:07:45,589 –> 00:07:48,089
زمانی که ما
183
00:07:48,089 –> 00:07:49,769
کارهایی را به صورت همزمان انجام می دهیم که باید به صورت
184
00:07:49,769 –> 00:07:52,229
ناهمزمان انجام دهیم، فرصتی برای اجرای این یک دام است و بنابراین
185
00:07:52,229 –> 00:07:54,929
وقتی اطلاعاتی در مورد محل
186
00:07:54,929 –> 00:07:56,729
شروع شمارنده
187
00:07:56,729 –> 00:07:58,709
و زمانی که شمارنده به پایان می رسد به دست می آوریم، آنها در همان
188
00:07:58,709 –> 00:08:01,229
جایی که به این معنی است که ما در حال انجام
189
00:08:01,229 –> 00:08:04,139
کارهایی نیستیم که ممکن است نیاز به انجام آن داشته باشیم، اما این
190
00:08:04,139 –> 00:08:06,169
نیز مانند یک مثال واقعا خوب از
191
00:08:06,169 –> 00:08:09,119
آن ثبات داده ها در یک انتظار و
192
00:08:09,119 –> 00:08:14,459
در یک بلوک دوگانه دور،
193
00:08:14,459 –> 00:08:17,729
مورد بعدی رشته های Python است و این
194
00:08:17,729 –> 00:08:20,429
احتمالاً رایج ترین و
195
00:08:20,429 –> 00:08:22,379
شناخته شده ترین مدل همزمانی که
196
00:08:22,379 –> 00:08:24,049
اکثر شما قبل از صحبت فنی از آن استفاده کرده اید،
197
00:08:24,049 –> 00:08:26,699
تنها یک
198
00:08:26,699 –> 00:08:28,619
رشته پایتون در یک زمان به دلیل قفل مفسر جهانی اجرا می شود،
199
00:08:28,619 –> 00:08:31,529
اما اغلب به نظر
200
00:08:31,529 –> 00:08:34,649
می رسد که غیر از این باشد زیرا پایتون
201
00:08:34,649 –> 00:08:36,000
آن قفل مفسر جهانی را آزاد می کند.
202
00:08:36,000 –> 00:08:38,099
در حین مسدود کردن عملیات i/o و
203
00:08:38,099 –> 00:08:41,129
خواب، حداقل واحد برنامه ریزی شده
204
00:08:41,129 –> 00:08:43,589
کد بایت پایتون است که وقتی پایتون
205
00:08:43,589 –> 00:08:45,779
عبارات شما
206
00:08:45,779 –> 00:08:48,930
را در مراحل سراسری اجرا می کند، آن ها را کامپایل می کند. nt
207
00:08:48,930 –> 00:08:50,790
در یک کد تک بایتی، اما
208
00:08:50,790 –> 00:08:52,379
209
00:08:52,379 –> 00:08:54,270
210
00:08:54,270 –> 00:08:57,090
اگر به چهار عبارت
211
00:08:57,090 –> 00:09:00,870
سمت چپ صفحه نگاه کنید که کدام
212
00:09:00,870 –> 00:09:03,840
یک
213
00:09:03,840 –> 00:09:07,800
از آنها یک کد بایتی است، واقعاً هیچ تضمین قوی ای ارائه نمی
214
00:09:07,800 –> 00:09:11,090
دهد. اولی فقط دست خود را
215
00:09:11,090 –> 00:09:16,700
با دومی، سومی
216
00:09:16,700 –> 00:09:20,400
و چهارمی را بالا بیاورید، بنابراین ما در اینجا توزیع تقریباً یکنواختی به دست آوردیم،
217
00:09:20,400 –> 00:09:22,950
در واقع این
218
00:09:22,950 –> 00:09:24,750
مورد دوم است، اما هدف این
219
00:09:24,750 –> 00:09:26,310
تمرین در واقع یافتن
220
00:09:26,310 –> 00:09:28,830
پاسخ صحیح نیست. به نوعی به شما اطلاع میدهیم که
221
00:09:28,830 –> 00:09:31,470
نباید به سازگاری کد بایت پایتون تکیه کنید، در
222
00:09:31,470 –> 00:09:34,770
عوض از موارد اولیه استفاده کنید
223
00:09:34,770 –> 00:09:36,390
که به شما امکان میدهند همزمان کار
224
00:09:36,390 –> 00:09:39,450
225
00:09:39,450 –> 00:09:40,920
226
00:09:40,920 –> 00:09:45,840
227
00:09:45,840 –> 00:09:47,760
کنید.
228
00:09:47,760 –> 00:09:48,810
ترکیبی از مفسر پایتون
229
00:09:48,810 –> 00:09:52,050
که هم تصمیم میگیرد چه زمانی سعی کنیم
230
00:09:52,050 –> 00:09:53,850
قفل مفسر سراسری را بدست آوریم و
231
00:09:53,850 –> 00:09:56,010
چه زمانی آن را آزاد کنیم، اما زمانی که میخواهیم
232
00:09:56,010 –> 00:09:57,810
قفل را از چندگانه بدست آوریم.
233
00:09:57,810 –> 00:10:00,120
234
00:10:00,120 –> 00:10:01,260
رشتههایی که هسته سیستم عامل در واقع پایان است یا
235
00:10:01,260 –> 00:10:03,440
تصمیم میگیرد که کدام رشته آن را نگه دارد،
236
00:10:03,440 –> 00:10:05,640
میتوانید در تصویر سمت راست ببینید
237
00:10:05,640 –> 00:10:09,330
که همانطور که در طول زمان حرکت میکنیم،
238
00:10:09,330 –> 00:10:12,510
وضعیت مشترک برای همه رشتهها به
239
00:10:12,510 –> 00:10:16,110
طور همزمان تغییر میکند و این
240
00:10:16,110 –> 00:10:22,020
در طول یک واحد زمانبندی شده اتفاق میافتد. و
241
00:10:22,020 –> 00:10:23,940
ما مقداری کد نمونه در سمت چپ
242
00:10:23,940 –> 00:10:26,940
داریم، یک برنامه رشته ای بسیار خوب،
243
00:10:26,940 –> 00:10:28,320
ما یک روش واقعا ساده در اینجا داریم که
244
00:10:28,320 –> 00:10:30,180
شمارنده را یک میلیون بار افزایش می دهد
245
00:10:30,180 –> 00:10:32,250
و هشت بار همزمان
246
00:10:32,250 –> 00:10:34,920
در انتهای آن اجرا می کنیم همانطور که انتظار داریم
247
00:10:34,920 –> 00:10:38,010
شمارنده به اندازه باشد. هشت میلیون در
248
00:10:38,010 –> 00:10:39,420
سمت راست ما کمی بیشتر
249
00:10:39,420 –> 00:10:42,480
از رویکرد کاوالیر استفاده می کنیم،
250
00:10:42,480 –> 00:10:44,940
قبل از افزایش شمارنده قفل نمی گیریم و
251
00:10:44,940 –> 00:10:47,250
به جای هشت میلیون بار که
252
00:10:47,250 –> 00:10:49,920
معمولاً انتظار داریم فقط حدود سه
253
00:10:49,920 –> 00:10:52,080
و نیم میلیون دریافت کنیم. کار بسیار
254
00:10:52,080 –> 00:10:54,120
ساده ای است که فکر می کنید انجام دهید،
255
00:10:54,120 –> 00:10:56,450
اما واقعاً نشان می دهد که نمی توانید به
256
00:10:56,450 –> 00:10:59,670
هیچ گونه موجودیت خارجی خود به غیر
257
00:10:59,670 –> 00:11:01,610
از موارد اولیه که به
258
00:11:01,610 –> 00:11:05,450
شما امکان می دهند همزمان باشید تکیه کنید.
259
00:11:08,230 –> 00:11:10,930
صحبت در مورد آزاد کردن
260
00:11:10,930 –> 00:11:16,139
قفل مترجم جهانی در اینجا،
261
00:11:16,139 –> 00:11:18,160
عموماً وقتی در مورد
262
00:11:18,160 –> 00:11:19,750
آزاد کردن آبشش صحبت می کنیم، اژدهاهایی وجود دارند که می
263
00:11:19,750 –> 00:11:21,610
خواهیم انجام دهیم، فراخوانی به
264
00:11:21,610 –> 00:11:26,589
زبان دیگری مانند C یا rust یا go یا واقعاً
265
00:11:26,589 –> 00:11:29,699
هر زبان دیگری است که نیست. C و
266
00:11:29,699 –> 00:11:32,230
انجام یک کار واقعاً فشرده
267
00:11:32,230 –> 00:11:34,660
در آنجا که به ما امکان میدهد هم از
268
00:11:34,660 –> 00:11:36,519
دستورالعملهای ماشین بهینهسازی استفاده کنیم و هم
269
00:11:36,519 –> 00:11:38,050
به دلیل اینکه با یک
270
00:11:38,050 –> 00:11:40,000
مفسر پایتون در تعامل نیستیم، میتوانیم با خیال راحت اجازه دهیم
271
00:11:40,000 –> 00:11:41,649
چندین رشته به صورت همزمان اجرا شوند
272
00:11:41,649 –> 00:11:43,449
بدون اینکه هیچ یک از دادههای پایتون را
273
00:11:43,449 –> 00:11:49,480
در معرض خطر وضعیت جهانی قرار دهیم. یک رشته انتشار GILF
274
00:11:49,480 –> 00:11:53,110
کاملاً به اشتراک گذاشته شده است و همچنین
275
00:11:53,110 –> 00:11:55,560
کاملاً غیرقابل اعتماد است، بنابراین میخواهیم تا آنجا که میتوانیم از
276
00:11:55,560 –> 00:11:57,879
استفاده از آن حالت اشتراکگذاری شده
277
00:11:57,879 –> 00:12:00,250
خودداری کنیم، در عوض زمانی که آماده
278
00:12:00,250 –> 00:12:02,350
برقراری ارتباط مجدد هستیم و قفل مفسر جهانی را دوباره دریافت میکنیم
279
00:12:02,350 –> 00:12:03,850
و دادهها
280
00:12:03,850 –> 00:12:05,439
را به پایتون برمیگردانیم، جایی که میتوان آن را ارسال کرد.
281
00:12:05,439 –> 00:12:08,319
موضوعات انتشار ایمن Gill به
282
00:12:08,319 –> 00:12:09,850
طور کامل توسط سیستم عامل برنامه ریزی شده
283
00:12:09,850 –> 00:12:13,589
است و ما تعدادی کد نمونه در اینجا داریم
284
00:12:13,589 –> 00:12:18,519
این پایتون نیست این یک پایتون است
285
00:12:18,519 –> 00:12:20,980
تابعی که با استفاده از C پیادهسازی میشود
286
00:12:20,980 –> 00:12:25,470
و رشتهای را بهعنوان آرگومان دریافت
287
00:12:25,470 –> 00:12:28,779
میکند که از PI star