در این مطلب، ویدئو LIVE: پردازش چند رشته ای و چند رشته ای در پایتون برای هوش مصنوعی/ML با زیرنویس فارسی را برای دانلود قرار داده ام. شما میتوانید با پرداخت 15 هزار تومان ، این ویدیو به علاوه تمامی فیلم های سایت را دانلود کنید.اکثر فیلم های سایت به زبان انگلیسی می باشند. این ویدئو دارای زیرنویس فارسی ترجمه شده توسط هوش مصنوعی می باشد که میتوانید نمونه ای از آن را در قسمت پایانی این مطلب مشاهده کنید.
مدت زمان فیلم: 1:50:44
تصاویر این ویدئو:
قسمتی از زیرنویس این فیلم:
00:00:03,840 –> 00:00:06,000
سلام دوستان، عصر بسیار خوبی داشته باشید و از
2
00:00:06,000 –> 00:00:07,839
اینکه امروز به آن ملحق شدید
3
00:00:07,839 –> 00:00:09,840
متشکرم، لطفاً در پنجره چت تأیید
4
00:00:09,840 –> 00:00:11,840
کنید که آیا می توانید
5
00:00:11,840 –> 00:00:14,639
صدای من را بشنوید و اگر دوباره می توانید صفحه من را ببینید، من
6
00:00:14,639 –> 00:00:15,599
7
00:00:15,599 –> 00:00:17,760
کل پنجره چت را روی تلفنم باز
8
00:00:17,760 –> 00:00:19,359
دارم
9
00:00:19,359 –> 00:00:21,199
به طوری که من می توانم آن را بدون نیاز به
10
00:00:21,199 –> 00:00:23,920
اشغال فضای روی صفحه ببینم،
11
00:00:23,920 –> 00:00:25,519
بنابراین می توانید در
12
00:00:25,519 –> 00:00:27,519
پنجره چت یوتیوب تأیید کنید
13
00:00:27,519 –> 00:00:30,400
که صدا واضح و قابل شنیدن است یا خیر، اجازه
14
00:00:30,400 –> 00:00:31,359
دهید فقط بررسی
15
00:00:31,359 –> 00:00:34,800
کنم که آه، فکر می کنم صدا باید بله باشد،
16
00:00:34,800 –> 00:00:36,960
من هم تنظیم کرده ام صدا را بالا ببرید تا مشکلی
17
00:00:36,960 –> 00:00:37,840
نداشته باشد، بنابراین صدا
18
00:00:37,840 –> 00:00:39,520
و پخش زنده خوب است،
19
00:00:39,520 –> 00:00:41,680
متشکرم از شما برای تأیید،
20
00:00:41,680 –> 00:00:43,360
بنابراین تا چند
21
00:00:43,360 –> 00:00:45,600
دقیقه دیگر شروع به کار می کنیم، بیایید منتظر بمانیم تا همه به آن ملحق شوند،
22
00:00:45,600 –> 00:00:46,559
23
00:00:46,559 –> 00:00:48,640
بله، من چند یادداشت دارم.
24
00:00:48,640 –> 00:00:51,199
کدی داشته باشید که همه آن را بررسی می
25
00:00:51,199 –> 00:00:53,360
کنیم و فقط چند دقیقه دیگر وارد بحث می شویم،
26
00:00:53,360 –> 00:00:55,120
27
00:00:55,120 –> 00:00:57,600
بیایید منتظر بمانیم تا همه به آن بپیوندند
28
00:00:57,600 –> 00:00:59,520
، دوباره چند دقیقه زودتر هستیم
29
00:00:59,520 –> 00:01:02,239
فقط یک درخواست کوچک در
30
00:01:02,239 –> 00:01:03,920
صورت قطع برق
31
00:01:03,920 –> 00:01:05,840
درست مثل شما من هم از خانه
32
00:01:05,840 –> 00:01:08,000
در سی کار می کنم از آنجایی که
33
00:01:08,000 –> 00:01:09,840
تا زمانی که ژنراتورهای ما در
34
00:01:09,840 –> 00:01:11,520
مجتمع آپارتمانی ما وارد شوند، برق قطع می شود، چند دقیقه طول می کشد،
35
00:01:11,520 –> 00:01:12,240
36
00:01:12,240 –> 00:01:14,400
بنابراین سعی می کنم در صورت امکان دوباره به همان جلسه زنده وصل شوم، در
37
00:01:14,400 –> 00:01:16,240
38
00:01:16,240 –> 00:01:18,720
بدترین حالت، یک جلسه زنده جدید
39
00:01:18,720 –> 00:01:20,479
در همان جلسه پخش خواهیم کرد. کانال
40
00:01:20,479 –> 00:01:22,000
فقط میخواست مطمئن شود، زیرا این یک
41
00:01:22,000 –> 00:01:24,240
جلسه زنده عمومی به مدت دو ساعت است،
42
00:01:24,240 –> 00:01:26,799
در صورتی که مشکل فنی وجود داشته باشد، سعی میکنیم
43
00:01:26,799 –> 00:01:27,840
44
00:01:27,840 –> 00:01:30,960
به محض شروع برق دوباره به آن بپیوندیم
45
00:01:30,960 –> 00:01:35,360
یا سعی میکنیم یک خوشه جدید
46
00:01:35,360 –> 00:01:39,200
بچرخانیم، بسیار خوب، اوه، پس کسی خوب است. سعی می کنم به
47
00:01:39,200 –> 00:01:40,560
چند سوال پاسخ دهم چون چند
48
00:01:40,560 –> 00:01:42,159
دقیقه زودتر هستیم
49
00:01:42,159 –> 00:01:44,320
ساگار یک سوال دارد که آیا می توانیم
50
00:01:44,320 –> 00:01:45,680
از برخی از
51
00:01:45,680 –> 00:01:48,320
پروژه های ml که در یک دوره کاربردی انجام می دهید
52
00:01:48,320 –> 00:01:50,320
به عنوان پروژه های سال آخر خود استفاده کنیم
53
00:01:50,320 –> 00:01:53,759
بله بله پس لطفا کپی پیست نکنید
54
00:01:53,759 –> 00:01:55,759
مطالعات موردی موجود که
55
00:01:55,759 –> 00:01:57,040
در دوره هستند،
56
00:01:57,040 –> 00:01:59,280
میتوانید زیرا با پیشرفت
57
00:01:59,280 –> 00:02:01,040
در دوره، ما
58
00:02:01,040 –> 00:02:03,439
برنامه راهنمایی خود را داریم که در آن به شما کمک میکنیم
59
00:02:03,439 –> 00:02:05,360
دو مشکل یادگیری ماشینی در دنیای واقعی را
60
00:02:05,360 –> 00:02:06,799
حل کنید
61
00:02:06,799 –> 00:02:09,520
تا بتوانید پروژههایی را که تحت
62
00:02:09,520 –> 00:02:10,160
آن انجام میدهید، انجام دهید.
63
00:02:10,160 –> 00:02:12,720
ما مربیگری و راهنمایی و
64
00:02:12,720 –> 00:02:13,599
شما می توانید
65
00:02:13,599 –> 00:02:15,760
آنها را به عنوان پروژه های کارشناسی خود منتشر کنید،
66
00:02:15,760 –> 00:02:16,640
67
00:02:16,640 –> 00:02:19,680
اما مجدداً لطفاً با استاد
68
00:02:19,680 –> 00:02:22,239
یا مدرس یا استادی که
69
00:02:22,239 –> 00:02:24,239
شما را برای پروژه کارشناسی شما راهنمایی می کند صحبت کنید
70
00:02:24,239 –> 00:02:25,520
71
00:02:25,520 –> 00:02:27,680
و آنها را به وضوح به آنها اطلاع دهید که چه
72
00:02:27,680 –> 00:02:29,280
کاری انجام می دهید زیرا این بسیار مهم است
73
00:02:29,280 –> 00:02:31,280
که شفاف باشید. کالج
74
00:02:31,280 –> 00:02:33,280
و دانشکده شما بسیار مهم است،
75
00:02:33,280 –> 00:02:35,360
بنابراین وقتی که شما با
76
00:02:35,360 –> 00:02:36,959
آن کاملاً واضح هستید، ما کاملاً خوب هستیم،
77
00:02:36,959 –> 00:02:38,560
78
00:02:38,560 –> 00:02:40,800
79
00:02:42,080 –> 00:02:45,360
بنابراین خوب چند نفر دوباره
80
00:02:45,360 –> 00:02:47,599
یک معمای سؤال دارند، بنابراین من
81
00:02:47,599 –> 00:02:49,519
تعداد دقیق مهندسی مکانیک را ندارم
82
00:02:49,519 –> 00:02:50,000
83
00:02:50,000 –> 00:02:52,080
دانشجویان، اما ما دوباره
84
00:02:52,080 –> 00:02:54,080
85
00:02:54,080 –> 00:02:56,800
تعدادی از سفرهای دانشآموزان خود را
86
00:02:56,800 –> 00:02:58,720
در این دوره منتشر کردهایم، بنابراین تعداد خوبی
87
00:02:58,720 –> 00:02:59,680
از مهندسین
88
00:02:59,680 –> 00:03:01,440
برق مکانیک و
89
00:03:01,440 –> 00:03:03,360
مهندسی عمران داریم، حتی
90
00:03:03,360 –> 00:03:05,360
افرادی که دارای پیشینه علمی هستند، البته آنها
91
00:03:05,360 –> 00:03:07,440
باید در رشته ریاضیات و
92
00:03:07,440 –> 00:03:10,239
علوم تحصیل کرده باشند. یازدهم و دوازدهم، بنابراین ما
93
00:03:10,239 –> 00:03:11,920
افرادی داریم که چند نفر با
94
00:03:11,920 –> 00:03:12,480
سابقه mba
95
00:03:12,480 –> 00:03:14,080
داریم که با موفقیت انتقال داده ایم.
96
00:03:14,080 –> 00:03:16,480
97
00:03:16,480 –> 00:03:19,519
من عدد دقیقی را در دست ندارم،
98
00:03:19,519 –> 00:03:22,159
اما این یک عدد غیر پیش پا افتاده است
99
00:03:22,159 –> 00:03:23,760
که مطمئناً می توانم اطمینان حاصل کنم، زیرا
100
00:03:23,760 –> 00:03:25,760
ما سوالات زیادی در زمینه برنامه نویسی دریافت می کنیم
101
00:03:25,760 –> 00:03:26,480
102
00:03:26,480 –> 00:03:29,360
زیرا افراد غیر cs باید یاد بگیرند
103
00:03:29,360 –> 00:03:31,920
و تبدیل شوند. در برنامه نویسی نیز
104
00:03:31,920 –> 00:03:33,840
خوب است،
105
00:03:33,840 –> 00:03:36,080
بنابراین آرون می گوید به موضوع بیایید rf
106
00:03:36,080 –> 00:03:38,159
لطفا صبور باشید ما کمی
107
00:03:38,159 –> 00:03:40,239
صبر و حوصله داریم یک مزیت کلیدی است که باید
108
00:03:40,239 –> 00:03:41,280
یاد بگیرید
109
00:03:41,280 –> 00:03:43,280
زیرا جلسه قرار است
110
00:03:43,280 –> 00:03:45,519
ساعت 7 بعدازظهر شروع شود لطفا صبور باشید ما از
111
00:03:45,519 –> 00:03:46,640
ساعت 7 بعدازظهر شروع می کنیم
112
00:03:46,640 –> 00:03:50,080
زمان استاندارد هند
113
00:03:54,879 –> 00:03:57,040
بسیار خوب است، بنابراین سؤال بسیار خوبی از mithun
114
00:03:57,040 –> 00:03:58,640
mithun یک سؤال دارد من به این پاسخ خواهم داد و سپس
115
00:03:58,640 –> 00:03:58,959
116
00:03:58,959 –> 00:04:00,640
جلسه زنده را شروع می کنم بازار کار
117
00:04:00,640 –> 00:04:02,000
برای یادگیری ماشین و علم داده چگونه است.
118
00:04:02,000 –> 00:04:03,920
119
00:04:03,920 –> 00:04:06,879
جلسه زنده دقیق یک
120
00:04:06,879 –> 00:04:08,400
جلسه زنده تعاملی فقط در مورد این
121
00:04:08,400 –> 00:04:08,959
موضوع،
122
00:04:08,959 –> 00:04:12,000
زمانی که قرنطینه کووید در چند ماه اول قرنطینه شروع شد
123
00:04:12,000 –> 00:04:13,519
124
00:04:13,519 –> 00:04:15,360
، وضعیت بد بود،
125
00:04:15,360 –> 00:04:17,600
اما آنچه ما حداقل از
126
00:04:17,600 –> 00:04:19,120
نقطه نظر خود
127
00:04:19,120 –> 00:04:20,880
در صحبت با استخدام کننده خود مشاهده می کنیم.
128
00:04:20,880 –> 00:04:22,400
افرادی که با مردم ما صحبت می
129
00:04:22,400 –> 00:04:23,840
کنند که برخی از دانش آموزان ما در
130
00:04:23,840 –> 00:04:26,400
حال جابجایی هستند، می بینیم که بازار
131
00:04:26,400 –> 00:04:29,360
در حال افزایش است، بنابراین
132
00:04:29,360 –> 00:04:30,479
مطمئناً به حالت عادی
133
00:04:30,479 –> 00:04:33,520
باز می گردد، در سطح فوریه نیست، اما
134
00:04:33,520 –> 00:04:35,440
اجازه دهید ما نیز واقع بین باشیم، این
135
00:04:35,440 –> 00:04:37,919
صحنه استخدام است. هنوز در سطح فوریه
136
00:04:37,919 –> 00:04:38,560
137
00:04:38,560 –> 00:04:41,120
نیست، اما به بدی سطوح آوریل نیست،
138
00:04:41,120 –> 00:04:43,120
همچنین به آرامی در حال افزایش است
139
00:04:43,120 –> 00:04:45,360
و بسیاری از شرکتها نیز در تلاش هستند تا
140
00:04:45,360 –> 00:04:46,880
فناوریهای
141
00:04:46,880 –> 00:04:50,320
جدید سیستمهای جدیدی بسازند تا از راه دور کار کنند یا
142
00:04:50,320 –> 00:04:52,960
از اهرمی برای خودکارسازی چند
143
00:04:52,960 –> 00:04:53,680
چیز استفاده
144
00:04:53,680 –> 00:04:55,759
کنند. بازار کار
145
00:04:55,759 –> 00:04:58,080
مطمئناً هنوز در سطح فوریه در حال افزایش است،
146
00:04:58,080 –> 00:05:00,080
اما امیدواریم در شش ماه
147
00:05:00,080 –> 00:05:01,600
آینده باید به سطوح عادی فوریه بازگردیم،
148
00:05:01,600 –> 00:05:03,120
149
00:05:03,120 –> 00:05:05,520
بنابراین با توجه به همه این موارد، بیایید
150
00:05:05,520 –> 00:05:08,160
با خود جلسه زنده شروع کنیم،
151
00:05:08,160 –> 00:05:10,400
زیرا این همان است چرا همه ما
152
00:05:10,400 –> 00:05:13,039
اینجا هستیم پس این جلسه زنده همه چیز در مورد
153
00:05:13,039 –> 00:05:15,360
پردازش چند رشته ای و چند رشته ای در
154
00:05:15,360 –> 00:05:16,400
پایتون است که
155
00:05:16,400 –> 00:05:18,240
دوباره انجام نمی شود من به شما می
156
00:05:18,240 –> 00:05:19,600
گویم که این جلسه چه خواهد بود و این
157
00:05:19,600 –> 00:05:21,199
جلسه چه چیزی در چند
158
00:05:21,199 –> 00:05:21,759
متر نخواهد بود.
159
00:05:21,759 –> 00:05:24,320
درست است، بنابراین این در مورد پردازش
160
00:05:24,320 –> 00:05:25,520
چند رشته ای و چند رشته ای در پایتون است، به
161
00:05:25,520 –> 00:05:27,440
طور خاص برای یادگیری ماشینی علم داده
162
00:05:27,440 –> 00:05:29,600
و برنامه های کاربردی یادگیری عمیق،
163
00:05:29,600 –> 00:05:31,919
بسیار خوب است، بنابراین اجازه دهید من کاملاً واضح بگویم که
164
00:05:31,919 –> 00:05:33,120
این جلسه درباره چه چیزی است و جلسه درباره چه
165
00:05:33,120 –> 00:05:34,960
چیزی نیست،
166
00:05:34,960 –> 00:05:36,720
دوباره به یاد داشته باشید که این اولین
167
00:05:36,720 –> 00:05:38,960
جلسه از نوع خود که در
168
00:05:38,960 –> 00:05:40,720
مورد پردازش موازی چند رشته ای و درست پردازش چند رشته ای انجام می دهیم،
169
00:05:40,720 –> 00:05:42,560
170
00:05:42,560 –> 00:05:44,320
بنابراین این یک جلسه مقدماتی خواهد بود
171
00:05:44,320 –> 00:05:46,560
اگر از قبل می دانید که چگونه
172
00:05:46,560 –> 00:05:49,039
پردازش چند رشته ای و چند رشته ای را انجام
173
00:05:49,039 –> 00:05:50,960
دهید، ممکن است سود زیادی نداشته باشید. در اینجا بسیار
174
00:05:50,960 –> 00:05:53,280
واضح است، بنابراین این موضوع به
175
00:05:53,280 –> 00:05:55,759
نحوه انجام چند پردازش اولیه
176
00:05:55,759 –> 00:05:57,600
با استفاده از چندین هسته در یک
177
00:05:57,600 –> 00:05:59,440
رایانه منفرد میپردازد که ممکن است
178
00:05:59,440 –> 00:06:01,600
نحوه اجرای چندین رشته را داشته باشید،
179
00:06:01,600 –> 00:06:03,600
زیرا اکثر پردازندههای اینتل دارای Hyper
180
00:06:03,600 –> 00:06:04,240
Threading هستند
181
00:06:04,240 –> 00:06:05,759
و میتوانید دوباره دو رشته روی هر
182
00:06:05,759 –> 00:06:07,840
هسته داشته باشید. چالشهایی با
183
00:06:07,840 –> 00:06:09,360
threading مانند مثلاً شما
184
00:06:09,360 –> 00:06:11,759
در پایتون gil دارید، کسانی از شما که
185
00:06:11,759 –> 00:06:12,800
کمی در مورد آن میدانید،
186
00:06:12,800 –> 00:06:13,840
بنابراین ما در مورد برخی از
187
00:06:13,840 –> 00:06:16,160
چالشها صحبت خواهیم کرد. استفاده از کدهای چند رشته ای
188
00:06:16,160 –> 00:06:18,560
در پایتون که
189
00:06:18,560 –> 00:06:20,080
اگر در حال نوشتن
190
00:06:20,080 –> 00:06:21,840
کدهای چند رشته ای در c پلاس پلاس یا
191
00:06:21,840 –> 00:06:22,639
جاوا هستید، برخی از این مشکلات ممکن است وجود نداشته باشد،
192
00:06:22,639 –> 00:06:24,880
اما همه اینها از یک
193
00:06:24,880 –> 00:06:26,160
یادگیری ماشینی علم داده
194
00:06:26,160 –> 00:06:28,560
و نقطه برتری یادگیری عمیق است. بنابراین
195
00:06:28,560 –> 00:06:30,560
ما با چند مثال
196
00:06:30,560 –> 00:06:33,360
ساده از راهحلهای ساده کد شروع میکنیم، بنابراین ابتدا
197
00:06:33,360 –> 00:06:35,280
آن را به دو بخش تقسیم
198
00:06:35,280 –> 00:06:37,199
میکنیم، ابتدا یک پیادهروی ساده کد را
199
00:06:37,199 –> 00:06:39,280
با مفاهیم ساده چند پردازشی و
200
00:06:39,280 –> 00:06:40,880
چند رشتهای با چند مثال بسیار ساده انجام
201
00:06:40,880 –> 00:06:42,000
202
00:06:42,000 –> 00:06:43,919
میدهیم. بخش اول بخش دوم
203
00:06:43,919 –> 00:06:45,680
این است که ما
204
00:06:45,680 –> 00:06:47,680
مشکلات معمولی را که شما حل می کنید مانند
205
00:06:47,680 –> 00:06:49,599
آموزش یک مدل جنگل تصادفی
206
00:06:49,599 –> 00:06:51,520
یا آموزش یک مدل gbt یا آموزش یک
207
00:06:51,520 –> 00:06:52,960
پرسپترون چند لایه
208
00:06:52,960 –> 00:06:55,599
و اینکه چگونه می توان برخی از این موارد را
209
00:06:55,599 –> 00:06:57,360
با استفاده از پردازش چند و
210
00:06:57,360 –> 00:06:58,800
چند رشته ای موازی کرد، بررسی خواهیم کرد. سیستمها،
211
00:06:58,800 –> 00:07:01,680
بنابراین این دو بخش درست است، بنابراین من فقط
212
00:07:01,680 –> 00:07:03,120
میخواهم دوباره روشن کنم که
213
00:07:03,120 –> 00:07:04,880
آنچه در این
214
00:07:04,880 –> 00:07:07,360
جلسه پوشش نمیدهیم این است که نمیتوانیم به عنوان مثال
215
00:07:07,360 –> 00:07:08,960
وارد بخش داخلی نحوه عملکرد
216
00:07:08,960 –> 00:07:10,479
سیستمهای عامل شویم. یک
217
00:07:10,479 –> 00:07:12,720
منطقه کامل در سیستم عامل ها به نام مدیریت
218
00:07:12,720 –> 00:07:14,840
فرآیند ارتباطات بین
219
00:07:14,840 –> 00:07:16,720
فرآیندی وجود دارد،
220
00:07:16,720 –> 00:07:18,080
چیزهای زیادی در مورد
221
00:07:18,080 –> 00:07:20,960
سمافورها وجود دارد که همه این مفاهیم را متقابل تغییر دهید،
222
00:07:20,960 –> 00:07:22,479
ما نمی توانیم
223
00:07:22,479 –> 00:07:25,199
به آن سطح برویم زیرا منظورم این است که اگر می
224
00:07:25,199 –> 00:07:26,080
خواهید
225
00:07:26,080 –> 00:07:27,680
همه
226
00:07:27,680 –> 00:07:29,440
مفاهیم چند رشته ای ارتباطات بین فرآیندی را به طور عمیق توضیح دهید،
227
00:07:29,440 –> 00:07:30,960
مثلاً در یک سیستم عامل لینوکس
228
00:07:30,960 –> 00:07:33,759
که به راحتی 20 تا 30 ساعت از 20
229
00:07:33,759 –> 00:07:35,360
تا 30 ساعت مفاهیم و کدها را توضیح می
230
00:07:35,360 –> 00:07:36,400
231
00:07:36,400 –> 00:07:38,720
دهد، بنابراین کسانی از شما که می خواهید از یک رایانه پایه ای تر یاد بگیرید.
232
00:07:38,720 –> 00:07:39,440
233
00:07:39,440 –> 00:07:40,639
234
00:07:40,639 –> 00:07:42,800
دیدگاه علم، دوره ای داریم
235
00:07:42,800 –> 00:07:44,080
که برای دانشجویان مقطع کارشناسی
236
00:07:44,080 –> 00:07:46,879
به عنوان بخشی از برنامه درسی دروازه خود طراحی
237
00:07:46,879 –> 00:07:48,560
کرده ایم که در آن همه این مفاهیم را با جزئیات بیشتری پوشش می دهیم،
238
00:07:48,560 –> 00:07:50,400
بنابراین اگر می خواهید بدانید که
239
00:07:50,400 –> 00:07:51,680
این یکی از دروسی است که
240
00:07:51,680 –> 00:07:53,440
می توانید در نظر بگیرید یا هر استانداردی را انتخاب کنید.
241
00:07:53,440 –> 00:07:55,360
کتابهای درسی برای سیستمعاملها و خواندن
242
00:07:55,360 –> 00:07:56,479
درباره
243
00:07:56,479 –> 00:07:58,639
Read up معمولاً دارای یک دسته
244
00:07:58,639 –> 00:08:00,479
از فصلها در مورد مدیریت
245
00:08:00,479 –> 00:08:01,840
فرآیند ارتباطات بین فرآیندی
246
00:08:01,840 –> 00:08:04,160
هستند. مکانهایی که میتوان دوباره مطالعه کرد، ما
247
00:08:04,160 –> 00:08:05,919
به بسیاری از جنبههای مهندسی نرمافزار دست نخواهیم داد،
248
00:08:05,919 –> 00:08:07,120
249
00:08:07,120 –> 00:08:08,639
زیرا به یاد داشته باشید که پردازش چند رشتهای
250
00:08:08,639 –> 00:08:10,400
و چند رشتهای چیزی است
251
00:08:10,400 –> 00:08:11,919
که فقط توسط یادگیری ماشین و
252
00:08:11,919 –> 00:08:13,840
افراد علم داده استفاده نمیشود، بلکه بهطور گسترده
253
00:08:13,840 –> 00:08:16,080
توسط افراد مهندسی نرمافزار نیز استفاده میشود،
254
00:08:16,080 –> 00:08:17,759
بنابراین ما قادر نخواهیم بود. برای دستیابی
255
00:08:17,759 –> 00:08:19,520
به این موضوع، زیرا این یک زمینه وسیع برای
256
00:08:19,520 –> 00:08:21,599
خود است، کتابهای کاملی در مورد
257
00:08:21,599 –> 00:08:23,440
نحوه نوشتن کدهای چند پردازشی یا
258
00:08:23,440 –> 00:08:25,440
چند هستهای و کد چند
259
00:08:25,440 –> 00:08:26,319
رشتهای نوشته شده است ایمنی
260
00:08:26,319 –> 00:08:28,879
فرآیند ایمنی فرآیند چندین مفهوم درست، بنابراین
261
00:08:28,879 –> 00:08:30,080
ما نمیتوانیم به آن برویم. به
262
00:08:30,080 –> 00:08:31,120
یاد داشته باشید
263
00:08:31,120 –> 00:08:33,519
که کل جلسه یک جلسه 90 تا 120 دقیقه
264
00:08:33,519 –> 00:08:34,559
ای است،
265
00:08:34,559 –> 00:08:36,958
بنابراین ما سه قسمت برای آن داریم،
266
00:08:36,958 –> 00:08:38,880
بخش اول این است که ما مراحل ساده کد را
267
00:08:38,880 –> 00:08:39,839
268
00:08:39,839 –> 00:08:41,120
برای توضیح مفاهیم
269
00:08:41,120 –> 00:08:42,719
چند پردازشی و چند رشته ای انجام می دهیم
270
00:08:42,719 –> 00:08:44,080
که قسمت اول
271
00:08:44,080 –> 00:08:46,000
قسمت دوم است. ما هر آنچه را که
272
00:08:46,000 –> 00:08:47,680
آموخته ایم دوباره خواهیم دید، چند
273
00:08:47,680 –> 00:08:50,320
کتابخانه جالب مانند job lib همچنین
274
00:08:50,320 –> 00:08:51,839
یک کتابخانه بسیار محبوب که به
275
00:08:51,839 –> 00:08:53,040
طور گسترده توسط یادگیری ماشینی استفاده می شود را پوشش خواهیم داد.
276
00:08:53,040 –> 00:08:55,200
کتابخانههایی مانند Sikit-learn و غیره
277
00:08:55,200 –> 00:08:57,120
بخش دوم مجموعهای از
278
00:08:57,120 –> 00:08:58,959
وظایف را به خود اختصاص میدهند که معمولاً به عنوان یک
279
00:08:58,959 –> 00:09:00,320
دانشمند داده یا مهندس یادگیری ماشین انجام میدهید
280
00:09:00,320 –> 00:09:00,959
281
00:09:00,959 –> 00:09:03,040
یا حتی اگر در حال آموزش
282
00:09:03,040 –> 00:09:04,240
مدلهای یادگیری عمیق حتی در
283
00:09:04,240 –> 00:09:05,600
تولید برخی از این
284
00:09:05,600 –> 00:09:06,720
مدلها هستید.
285
00:09:06,720 –> 00:09:08,320
می توان از پردازش
286
00:09:08,320 –> 00:09:10,000
چند رشته ای و چند رشته ای استفاده
287
00:09:10,000 –> 00:09:12,399
کرد. قسمت سوم قسمت سوم یک q باز خواهد بود و
288
00:09:12,399 –> 00:09:14,000
به
289
00:09:14,000 –> 00:09:15,839
سمت راست می رویم ما سعی
290
00:09:15,839 –> 00:09:18,160
می کنیم تا حد امکان به سوالات پاسخ دهیم
291
00:09:18,160 –> 00:09:20,480
اما اجازه دهید واقع بین باشیم این غیر ممکن است
292
00:09:20,480 –> 00:09:22,160
زیرا یک جلسه عمومی
293
00:09:22,160 –> 00:09:23,760
با تعداد زیادی نفر که در آن شرکت میکنند، ما
294
00:09:23,760 –> 00:09:25,440
نمیتوانیم به
295
00:09:25,440 –> 00:09:27,839
همه سؤالاتی که در q a پاسخ
296
00:09:27,839 –> 00:09:29,440
میدهیم پاسخ دهیم، بنابراین هر چیزی که نتوانستیم پاسخ
297
00:09:29,440 –> 00:09:31,680
دهیم، به راحتی به ما ایمیل بزنید در تیم در
298
00:09:31,680 –> 00:09:33,279
299
00:09:33,279 –> 00:09:35,120
تیم دوره کاربردی در دوره کاربردی و ما سعی می کنم
300
00:09:35,120 –> 00:09:37,440
تا حد امکان به سؤالات زیادی پاسخ
301
00:09:37,440 –> 00:09:39,120
دهم، بنابراین می توانید به وب سایت ما بروید
302
00:09:39,120 –> 00:09:40,480
و تمام جزئیات را در مورد نحوه
303
00:09:40,480 –> 00:09:42,160
برقراری ارتباط دریافت کنید یا در غیر این صورت نظری را
304
00:09:42,160 –> 00:09:43,680
در زیر این ویدیو بگذارید، ما سعی می کنیم تا
305
00:09:43,680 –> 00:09:44,720
حد امکان به بسیاری از سوالات پاسخ
306
00:09:44,720 –> 00:09:47,200
دهیم. فقط میخواستم
307
00:09:47,200 –> 00:09:48,880
دستور کار امروز را تنظیم کنم تا متوجه شوید
308
00:09:48,880 –> 00:09:50,399
که
309
00:09:50,399 –> 00:09:52,560
ما دوباره به کجا میرویم، سعی
310
00:09:52,560 –> 00:09:54,640
311
00:09:54,640 –> 00:09:56,480
میکنیم در صورت نیاز در صورت وجود
312
00:09:56,480 –> 00:09:58,080
درخواست از سوی دانشآموزان، برخی از مفاهیم مقدماتی را در این جلسه پوشش دهیم. جلسات بیشتری را
313
00:09:58,080 –> 00:09:59,680
در آینده انجام خواهیم داد، ما آنها
314
00:09:59,680 –> 00:10:02,240
را بعداً درست انجام خواهیم داد، بنابراین
315
00:10:02,240 –> 00:10:04,880
ما محتوایی برای حدود 90 تا 120 دقیقه داشته باشیم،
316
00:10:04,880 –> 00:10:07,360
بنابراین قبل از هر چیز فقط میخواهیم
317
00:10:07,360 –> 00:10:08,720
نقطهها را در اینجا به هم وصل
318
00:10:08,720 –> 00:10:10,800
کنیم تا شاید به عنوان یک دانشمند داده یا
319
00:10:10,800 –> 00:10:12,160
یک مهندس یادگیری ماشین یا کسی
320
00:10:12,160 –> 00:10:13,839
که در حال یادگیری این موضوعات است،
321
00:10:13,839 –> 00:10:15,040
شما ممکن است از بسیاری از این
322
00:10:15,040 –> 00:10:16,240
کتابخانه ها استفاده کرده باشید، ممکن است از
323
00:10:16,240 –> 00:10:17,920
scikit-learn
324
00:10:17,920 –> 00:10:20,000
درست استفاده کرده باشید، ممکن است از numpy و
325
00:10:20,000 –> 00:10:21,839
scipy استفاده کرده باشید، ممکن است از tensorflow و
326
00:10:21,839 –> 00:10:24,000
pi torch و کتابخانه هایی مانند آن
327
00:10:24,000 –> 00:10:26,079
استفاده کرده باشید. از این کتابخانه ها در واقع
328
00:10:26,079 –> 00:10:27,600
پردازش
329
00:10:27,600 –> 00:10:30,560
چند هسته ای و یا پردازش چند هسته ای و
330
00:10:30,560 –> 00:10:31,519
چند رشته ای را انجام می دهند،
331
00:10:31,519 –> 00:10:33,279
به عنوان مثال، من فقط می خواهم به
332
00:10:33,279 –> 00:10:35,200
شما یک مثال ساده بزنم،
333
00:10:35,200 –> 00:10:36,959
به عنوان مثال در scikit، زمانی که شما در حال
334
00:10:36,959 –> 00:10:38,560
آموزش یک سری مدل هستید، به عنوان مثال یاد بگیرید.
335
00:10:38,560 –> 00:10:39,839
بیایید فرض کنیم که شما در حال آموزش یک مدل رگرسیون لجستیک هستید
336
00:10:39,839 –> 00:10:41,120
337
00:10:41,120 –> 00:10:43,440
، این پارامتر به نام end
338
00:10:43,440 –> 00:10:44,800
jobs
339
00:10:44,800 –> 00:10:46,480
خوب است، دوباره در مورد نحوه کارکرد این
340
00:10:46,480 –> 00:10:48,079
کار در ویدیوهای دوره توضیح میدهیم،
341
00:10:48,079 –> 00:10:51,120
اما اگر n jobs روی -1 تنظیم شده باشد،
342
00:10:51,120 –> 00:10:53,440
آنچه که scikit-learn سعی میکند انجام دهد
343
00:10:53,440 –> 00:10:54,560
به شما داده میشود. داده هایی
344
00:10:54,560 –> 00:10:57,519
که سعی می کند اجرا کند یا سعی می کند
345
00:10:57,519 –> 00:10:58,399
این مدل را
346
00:10:58,399 –> 00:11:00,800
با استفاده از تمام هسته هایی که
347
00:11:00,800 –> 00:11:02,399
در رایانه شما موجود است آموزش دهد
348
00:11:02,399 –> 00:11:04,640
و scikit-learn به صورت داخلی از
349
00:11:04,640 –> 00:11:06,240
کتابخانه ای به نام job lib
350
00:11:06,240 –> 00:11:08,160
استفاده می کند که در این جلسه به
351
00:11:08,160 –> 00:11:10,720
آن خواهیم پرداخت. این یک کتابخانه بسیار محبوب و
352
00:11:10,720 –> 00:11:14,320
بسیار پرکاربرد است برای ساده کردن
353
00:11:14,320 –> 00:11:16,160
برنامه نویسی موازی در یک جعبه
354
00:11:16,160 –> 00:11:18,240
خوب است، بنابراین ما به برخی از
355
00:11:18,240 –> 00:11:19,839
مفاهیم اساسی job lib همچنین برخی از
356
00:11:19,839 –> 00:11:21,519
مفاهیم اصلی job lib اشاره خواهیم کرد،
357
00:11:21,519 –> 00:11:23,839
زیرا اگر می خواهید
358
00:11:23,839 –> 00:11:25,440
359
00:11:25,440 –> 00:11:27,600
هر محاسبات موازی یا روی یک
360
00:11:27,600 –> 00:11:30,079
جعبه چند هسته ای را پیاده سازی کنید. یا سیستم های چند رشته ای
361
00:11:30,079 –> 00:11:32,000
job lib گزینه بسیار خوبی است، استفاده از آن بسیار
362
00:11:32,000 –> 00:11:33,440
ساده است، استفاده از آن
363
00:11:33,440 –> 00:11:35,519
بسیار آسان است
364
00:11:35,519 –> 00:11:37,680
365
00:11:37,680 –> 00:11:40,079
366
00:11:40,079 –> 00:11:41,680
367
00:11:41,680 –> 00:11:43,440
. برخی از عملیات را cipy کنید،
368
00:11:43,440 –> 00:11:44,880
برای مثال تصور کنید اگر
369
00:11:44,880 –> 00:11:46,079
چند ضرب ماتریس را انجام میدهید، برخی
370
00:11:46,079 –> 00:11:48,800
371
00:11:48,800 –> 00:11:50,639
از عملیات کلیدی که به صورت
372
00:11:50,639 –> 00:11:51,440
numpy و
373
00:11:51,440 –> 00:11:54,000
scipy انجام میشوند نیز با استفاده از
374
00:11:54,000 –> 00:11:55,680
هستههای متعدد و
375
00:11:55,680 –> 00:11:57,040
رشتههای متعددی که در
376
00:11:57,040 –> 00:11:59,839
رایانه شما امکانپذیر است، اجرا میشوند.
377
00:11:59,839 –> 00:12:00,160
378
00:12:00,160 –> 00:12:03,839
از کتابخانه ای به نام blas استفاده کنید درست است، این یک
379
00:12:03,839 –> 00:12:05,760
کتابخانه بسیار محبوب برای
380
00:12:05,760 –> 00:12:06,959
جبر خطی است، بسیار
381
00:12:06,959 –> 00:12:08,880
خوب، فکر می کنم این مخفف زیرروال های
382
00:12:08,880 –> 00:12:10,000
جبر خطی اولیه
383
00:12:10,000 –> 00:12:13,200
یا چیزی شبیه به
384
00:12:13,200 –> 00:12:15,680
زیر رویه های فرعی است یا فکر می کنم به آن می گویند
385
00:12:15,680 –> 00:12:17,600
شکل کامل را فراموش کرده ام فکر می کنم
386
00:12:17,600 –> 00:12:20,079
جبر خطی اولیه است. زیرروالها فکر میکنم بله،
387
00:12:20,079 –> 00:12:22,480
بنابراین اینها کدهای بسیار بهینهشدهای
388
00:12:22,480 –> 00:12:24,160
هستند که برای اکثر عملیاتهای جبر خطی نوشته
389
00:12:24,160 –> 00:12:25,120
390
00:12:25,120 –> 00:12:28,399
شدهاند، بنابراین blas به طور گسترده از blas استفاده میکند،
391
00:12:28,399 –> 00:12:31,680
خوب، blas در داخل از بسیاری از
392
00:12:31,680 –> 00:12:34,000
کدهای چند هستهای فرآیند چند هستهای و
393
00:12:34,000 –> 00:12:36,000
کدهای چند رشتهای استفاده میکند، همچنین
394
00:12:36,000 –> 00:12:38,160
اگر موارد بیشتری ببینید سیستمهای مدرنی
395
00:12:38,160 –> 00:12:39,519
مانند tensorflow
396
00:12:39,519 –> 00:12:41,680
tensorflow بدون اینکه شما نیازی به
397
00:12:41,680 –> 00:12:42,800
گفتن چیزی
398
00:12:42,800 –> 00:12:44,639
داشته باشید، از چندین رشته در
399
00:12:44,639 –> 00:12:46,800
دسترس استفاده میکند در رایانه شما همچنین از چندین هسته استفاده می کند
400
00:12:46,800 –> 00:12:48,399
تصور کنید اگر
401
00:12:48,399 –> 00:12:49,760
جعبه gpu
402
00:12:49,760 –> 00:12:52,240
ندارید tensorflow ذاتاً از چندین
403
00:12:52,240 –> 00:12:54,800
رشته در چندین هسته شماره یک
404
00:12:54,800 –> 00:12:58,320
استفاده می کند همچنین می تواند از یک gpu استفاده کند دوباره gpu دارای
405
00:12:58,320 –> 00:12:58,959
چندین
406
00:12:58,959 –> 00:13:01,360
پردازنده در داخل آن است که در
407
00:13:01,360 –> 00:13:03,360
مورد معماری یک gpu صحبت می کنیم و چرا
408
00:13:03,360 –> 00:13:04,800
برای یادگیری عمیق در ویدیوهای دوره بسیار محبوب است،
409
00:13:04,800 –> 00:13:06,639
بنابراین
410
00:13:06,639 –> 00:13:08,079
tensorflow به گونه ای طراحی شده است
411
00:13:08,079 –> 00:13:09,200
که می تواند
412
00:13:09,200 –> 00:13:10,240
چند هسته ای چند رشته ای انجام
413
00:13:10,240 –> 00:13:12,160
دهد و می تواند از چندین پردازنده
414
00:13:12,160 –> 00:13:13,839
در یک gpu استفاده کند و حتی می تواند محاسبات توزیع شده را
415
00:13:13,839 –> 00:13:15,440
تا حدی به
416
00:13:15,440 –> 00:13:17,839
درستی انجام دهد. بنابراین اکثر کتابخانههای محبوبی
417
00:13:17,839 –> 00:13:19,920
که شما بهعنوان دانشمند داده
418
00:13:19,920 –> 00:13:21,120
از آنها استفاده میکنید،
419
00:13:21,120 –> 00:13:22,639
از نوعی حق چند رشتهای یا
420
00:13:22,639 –> 00:13:25,600
چند پردازشی استفاده میکنند، بنابراین میخواهم
421
00:13:25,600 –> 00:13:27,440
این دیدگاه را به شما بدهم که این همان
422
00:13:27,440 –> 00:13:29,040
چیزی است که در زیر سرپوش اتفاق میافتد،
423
00:13:29,040 –> 00:13:30,639
بنابراین یادگیری چند مورد از این موارد میتواند مفید باشد.
424
00:13:30,639 –> 00:13:33,040
مفید باشید پس بیایید یک مثال بسیار ساده بزنیم
425
00:13:33,040 –> 00:13:33,680
426
00:13:33,680 –> 00:13:35,200
درست میخواستم یک
427
00:13:35,200 –> 00:13:37,279
مثال بسیار ساده بزنم و نشان دهم
428
00:13:37,279 –> 00:13:39,760
که چگونه میتوانیم از کدهای چند پردازشی و
429
00:13:39,760 –> 00:13:40,959
چند رشتهای استفاده کنیم،
430
00:13:40,959 –> 00:13:43,519
بنابراین ابتدا و برای emost again mean
431
00:13:43,519 –> 00:13:45,519
یک عملیات بسیار ساده است که ما محاسبه می کنیم
432
00:13:45,519 –> 00:13:47,120
تصور کنید شما حدود 100 میلیون
433
00:13:47,120 –> 00:13:49,360
عدد
434
00:13:49,360 –> 00:13:52,480
دارید، فرض کنید یک آرایه ناقص از 100
435
00:13:52,480 –> 00:13:53,519
میلیون عدد
436
00:13:53,519 –> 00:13:55,040
دارید و می خواهید میانگین همه
437
00:13:55,040 –> 00:13:56,959
این اعداد را محاسبه کنید خوب دوباره من مقداری
438
00:13:56,959 –> 00:13:58,800
کد برای این دارم. من شما را از طریق آن
439
00:13:58,800 –> 00:14:01,279
راهنمایی می کنم خوب چگونه این کار را انجام می دهید،
440
00:14:01,279 –> 00:14:02,560
راه های متعددی برای انجام درست آن وجود دارد
441
00:14:02,560 –> 00:14:05,040
که می توانید از تابع میانگین داخلی numpy استفاده کنید
442
00:14:05,040 –> 00:14:05,839
443
00:14:05,839 –> 00:14:08,480
که بسیار بهینه شده است، نقطه numpy وجود دارد.
444
00:14:08,480 –> 00:14:10,240
445
00:14:10,240 –> 00:14:10,880
446
00:14:10,880 –> 00:14:13,920
یک آرایه numpy
447
00:14:13,920 –> 00:14:15,600
درست می توانید این کار را انجام دهید، بنابراین این یک
448
00:14:15,600 –> 00:14:17,839
احتمال است که این دوباره numpy است به این معنی که
449
00:14:17,839 –> 00:14:18,560
خود به
450
00:14:18,560 –> 00:14:20,959
طور ضمنی از کد انفجاری زیاد و
451
00:14:20,959 –> 00:14:23,360
کد سی سی پلاس پلاس بهینه سازی شده
452
00:14:23,360 –> 00:14:25,279
درست استفاده می کند، اما اگر می خواهید کد خود را خودتان بنویسید،
453
00:14:25,279 –> 00:14:26,480
خوب
454
00:14:26,480 –> 00:14:27,680
بگذارید ببینیم بیایید نحوه نوشتن را ببینیم.
455
00:14:27,680 –> 00:14:30,079
دوباره خیلی ساده است برای حلقه آه قبل از
456
00:14:30,079 –> 00:14:32,079
اینکه وارد آن شویم خوب این کدی است که
457
00:14:32,079 –> 00:14:32,480
458
00:14:32,480 –> 00:14:34,480
من دارم شما را از طریق این کد
459
00:14:34,480 –> 00:14:35,600
راهنمایی می کنم و یادداشت هایی که در اینجا دارم به
460
00:14:35,600 –> 00:14:37,760
عقب و جلو می روند هر کجا
461
00:14:37,760 –> 00:14:39,360
کدی در اینجا وجود داشته باشد و f
462
00:14:39,360 –> 00:14:42,560
درست است خیلی جالب است، پس اگر می خواهید بفهمید
463
00:14:42,560 –> 00:14:43,440
464
00:14:43,440 –> 00:14:46,000
که چند کامپیوتر دارم، بنابراین
465
00:14:46,000 –> 00:14:46,880
من یک استریم زنده را
466
00:14:46,880 –> 00:14:49,680
روی آن درست انجام می دهم، بنابراین می خواهم
467
00:14:49,680 –> 00:14:50,959
468
00:14:50,959 –> 00:14:53,440
بفهمم که اگر بخواهم بفهمم
469
00:14:53,440 –> 00:14:54,720
چند کامپیوتر کار
470
00:14:54,720 –> 00:14:56,560
می کنند، چند پردازنده انجام می دهند، چند نفر را تصور کنید.
471
00:14:56,560 –> 00:14:58,560
472
00:14:58,560 –> 00:15:00,800
اگر از سیستم لینوکس استفاده میکنید
473
00:15:00,800 –> 00:15:03,199
که اکثر جعبههای تولید درست هستند، چند رشته روی رایانهام
474
00:15:03,199 –> 00:15:06,399
دارم، میتوانید این دستور به نام ls cpu را اجرا کنید
475
00:15:06,399 –> 00:15:08,480
که تمام اطلاعات مربوط به cpu شما را به شما میگوید
476
00:15:08,480 –> 00:15:10,560
که چند رشته وجود دارد
477
00:15:10,560 –> 00:15:12,000
چند تا پردازندهها وجود دارند
478
00:15:12,000 –> 00:15:14,079
و چیزهایی از این قبیل از آنجایی که من از مک استفاده میکنم
479
00:15:14,079 –> 00:15:16,320
دوباره چیزی معادل دارد،
480
00:15:16,320 –> 00:15:17,519
481
00:15:17,519 –> 00:15:19,360
اگر از ویندوز باکس استفاده میکنید میتوانید در گوگل جستجو کنید، فقط در
482
00:15:19,360 –> 00:15:20,959
گوگل جستجو کنید که
483
00:15:20,959 –> 00:15:24,000
معادل CPU ls در ویندوز چیست، اوکی در مک،
484
00:15:24,000 –> 00:15:25,680
فقط بگویید system profiler این
485
00:15:25,680 –> 00:15:26,079
دستور
486
00:15:26,079 –> 00:15:27,519
دوباره من این دستور را از روی
487
00:15:27,519 –> 00:15:29,120
بیخبر نمیدانستم، فقط آن را در گوگل جستجو کردم،
488
00:15:29,120 –> 00:15:31,120
بنابراین آنچه در اینجا میگوید اشکالی ندارد، همه چیزهای رایانهام را به من میگوید،
489
00:15:31,120 –> 00:15:33,040
490
00:15:33,040 –> 00:15:35,600
من یک پردازنده شش هستهای i7 دارم، یک
491
00:15:35,600 –> 00:15:37,199
پردازنده اینتل است و شش
492
00:15:37,199 –> 00:15:40,079
c دارد. سنگ معدن درست است پس این یک قسمت است و
493
00:15:40,079 –> 00:15:41,920
اگر متوجه شده اید اینجا می گوید
494
00:15:41,920 –> 00:15:43,680
فناوری hyper threading فعال است فناوری Hyper threading
495
00:15:43,680 –> 00:15:44,880
چیزی است که
496
00:15:44,880 –> 00:15:47,120
اینتل به آن دست یافته است، فکر می کنم در
497
00:15:47,120 –> 00:15:49,519
پردازنده های پنتیوم چهار آنها اگر اشتباه نکنم
498
00:15:49,519 –> 00:15:51,360
اوایل دهه 2000 بود، یادم نمی آید
499
00:15:51,360 –> 00:15:52,560
سال دقیق
500
00:15:52,560 –> 00:15:55,040
اما چیزی که اینجا گفتند این بود که گفتند
501
00:15:55,040 –> 00:15:56,720
خوب است، من به شما می گویم که threading چیست،
502
00:15:56,720 –> 00:15:59,519
بنابراین به طور خلاصه برای هر هسته ای که
503
00:15:59,519 –> 00:16:00,720
شما
504
00:16:00,720 –> 00:16:02,320
حق دارید، می توانید دو رشته داشته باشید اکنون
505
00:16:02,320 –> 00:16:04,240
ممکن است بگویید هدف از کدهای
506
00:16:04,240 –> 00:16:05,759
رشته و غیره چیست. در
507
00:16:05,759 –> 00:16:06,959
عرض چند دقیقه
508
00:16:06,959 –> 00:16:09,440
به این نتیجه می رسم، بسیار خوب، بنابراین ابتدا بیایید ببینیم اوکی، پس
509
00:16:09,440 –> 00:16:11,279
این پیکربندی سیستم فعلی من
510
00:16:11,279 –> 00:16:12,079
است،
511
00:16:12,079 –> 00:16:14,480
اوکی فقط می خواستم به شما بگویم خوب، من
512
00:16:14,480 –> 00:16:16,480
16 گیگ رم دارم همه این موارد
513
00:16:16,480 –> 00:16:20,160
که در اینجا ارائه شده است.
514
00:16:20,160 –> 00:16:22,240
اگر می خواهید بفهمید که
515
00:16:22,240 –> 00:16:24,160
معنی 100 میلیون مشاهده چیست که
516
00:16:24,160 –> 00:16:25,759
شما یک مشکل بسیار ساده دارید، من آن
517
00:16:25,759 –> 00:16:27,120
را انجام می دهم تا
518
00:16:27,120 –> 00:16:29,120
برای ما آسان باشد که روی پردازش
519
00:16:29,120 –> 00:16:30,880
چند رشته ای و چند رشته ای تمرکز کنیم و
520
00:16:30,880 –> 00:16:31,519
بخش علم
521
00:16:31,519 –> 00:16:34,079
داده را کاهش دهیم. اولین نیمی از جلسه ما درست
522
00:16:34,079 –> 00:16:35,040
در نیمه دوم
523
00:16:35,040 –> 00:16:36,560
ما بر روی یادگیری ماشین و قطعات علم داده تمرکز خواهیم کرد،
524
00:16:36,560 –> 00:16:39,120
خوب تصور کنید، بنابراین
525
00:16:39,120 –> 00:16:40,959
این 100 میلیون است درست این 100 میلیون
526
00:16:40,959 –> 00:16:42,399
است، n من 100 میلیون است،
527
00:16:42,399 –> 00:16:45,279
من فقط در حال ایجاد یک من فقط از numpy هستم
528
00:16:45,279 –> 00:16:46,160
خیلی
529
00:16:46,160 –> 00:16:48,160
خوب، فرض میکنم همه شما میدانید که
530
00:16:48,160 –> 00:16:50,560
اساساً یک بردار ایجاد میکند
531
00:16:50,560 –> 00:16:51,680
یا یک
532
00:16:51,680 –> 00:16:54,160
آرایه دوم یکبعدی
533
00:16:54,160 –> 00:16:56,480
با اندازه ۱۰۰ میلیون عدد ایجاد میکند،
534
00:16:56,480 –> 00:16:57,839
535
00:16:57,839 –> 00:17:00,399
اگر میخواهید همه
536
00:17:00,399 –> 00:17:01,279
آنها را جمعبندی کنید و برگردید، همه آنها اعداد تصادفی هستند.
537
00:17:01,279 –> 00:17:03,279
خوب اینجا می خواهم همه چیز را زمان بندی کنم
538
00:17:03,279 –> 00:17:04,880
می خواهم ببینم چه اتفاقی می افتد
539
00:17:04,880 –> 00:17:07,599
که هر کدام از اینها چقدر زمان می برد
540
00:17:07,599 –> 00:17:09,039
دوباره خوب، کل این
541
00:17:09,039 –> 00:17:11,119
کد و یادداشت ها را در پایان این
542
00:17:11,119 –> 00:17:12,480
جلسه به
543
00:17:12,480 –> 00:17:14,000
اشتراک می گذارم بنابراین به اشتراک می گذارم که آن را در قسمت قرار می دهم
544
00:17:14,000 –> 00:17:15,520
بخش توضیحات ویدیو، بنابراین
545
00:17:15,520 –> 00:17:17,119
نگران یادداشت برداری
546
00:17:17,119 –> 00:17:19,199
نباشید، تمام این یادداشت هایی را که من
547
00:17:19,199 –> 00:17:20,799
به صورت دستی نوشته ام یا کد را در
548
00:17:20,799 –> 00:17:21,919
پایان جلسه دریافت خواهید کرد،
549
00:17:21,919 –> 00:17:24,559
بنابراین زمان وارد کردن من
550
00:17:24,559 –> 00:17:25,359
اساساً
551
00:17:25,359 –> 00:17:27,520
یک کتابخانه در پایتون به صورت داخلی است.
552
00:17:27,520 –> 00:17:28,720
کتابخانه ای که به ما کمک می کند
553
00:17:28,720 –> 00:17:30,960
زمان t hings بسیار خوب در اینجا ما تابعی داریم
554
00:17:30,960 –> 00:17:31,760
به نام معنی
555
00:17:31,760 –> 00:17:33,440
این یک پیاده سازی بسیار ساده است من
556
00:17:33,440 –> 00:17:35,440
عمداً آن را با استفاده از یک حلقه for پیاده سازی کردم
557
00:17:35,440 –> 00:17:36,080
558
00:17:36,080 –> 00:17:38,640
اما می توانیم از numpy’s numpy یک
559
00:17:38,640 –> 00:17:40,240
عملیات sum داخلی دارد که بسیار
560
00:17:40,240 –> 00:17:41,120
سریعتر است
561
00:17:41,120 –> 00:17:43,280
اما اگر بخواهید آن را درست بنویسید بنابراین
562
00:17:43,280 –> 00:17:45,520
باید این d که یک متغیر سراسری است،
563
00:17:45,520 –> 00:17:47,360
بنابراین ما می گوییم مجموع برابر با 0 n
564
00:17:47,360 –> 00:17:48,559
برابر با اندازه d نقطه است
565
00:17:48,559 –> 00:17:50,000
و فقط یک حلقه for ساده را جمع بندی می کنیم،
566
00:17:50,000 –> 00:17:51,840
در نهایت ما میانگین را محاسبه
567
00:17:51,840 –> 00:17:53,039
می کنیم و آن را
568
00:17:53,039 –> 00:17:54,720
به صورت دستی برمی گردانیم که یک برای را می نویسیم.
569
00:17:54,720 –> 00:17:56,559
اکنون اینجا را حلقه بزنید تا این را اجرا کنید
570
00:17:56,559 –> 00:17:58,559
چقدر زمان می برد تا
571
00:17:58,559 –> 00:18:00,320
بتوانید این متغیر به نام زمان شروع را ایجاد کنید،
572
00:18:00,320 –> 00:18:04,000
اجازه دهید فقط کمی این را بزرگنمایی کنم،
573
00:18:04,000 –> 00:18:05,600
فقط یک ثانیه به من بدهید
574
00:18:05,600 –> 00:18:07,520
تا بتوانید صفحه را بهتر ببینید، خوب
575
00:18:07,520 –> 00:18:09,600
من زوم می کنم کمی بله
576
00:18:09,600 –> 00:18:12,799
خوب است، بنابراین شما خوب است زمان شروع، زمان
577
00:18:12,799 –> 00:18:14,320
نقطه زمان است زمان نقطه زمان
578
00:18:14,320 –> 00:18:16,640
زمان فعلی را برمی گرداند، بنابراین زمان شروع
579
00:18:16,640 –> 00:18:17,679
در واقع
580
00:18:17,679 –> 00:18:19,200
هر زمانی را دارد که زمان فعلی در آن
581
00:18:19,200 –> 00:18:20,799
نقطه بوده است، زمانی که این کار
582
00:18:20,799 –> 00:18:22,320
خوب بود، پس ما تابع میانگین را اجرا می کنیم،
583
00:18:22,320 –> 00:18:24,000
584
00:18:24,000 –> 00:18:25,760
بنابراین این اراده l این کار چه کاری انجام می دهد این
585
00:18:25,760 –> 00:18:27,520
در واقع کنترل را به تابع اصلی منتقل می کند که
586
00:18:27,520 –> 00:18:28,400
587
00:18:28,400 –> 00:18:30,400
کل کد اجرا می شود و سپس
588
00:18:30,400 –> 00:18:31,919
هر چیزی را که برمی گرداند برمی گردد یعنی
589
00:18:31,919 –> 00:18:33,760
m برابر با معنی است
590
00:18:33,760 –> 00:18:36,080
سپس بعد از این که همه این کد
591
00:18:36,080 –> 00:18:38,160
اجرا شد و دوباره من نمی سازم یک
592
00:18:38,160 –> 00:18:39,440
یادداشت از زمان در
593
00:18:39,440 –> 00:18:41,679
اینجا زمان نقطه زمان به شما زمان
594
00:18:41,679 –> 00:18:44,000
پس از اجرای تابع میانگین را می دهد،
595
00:18:44,000 –> 00:18:46,000
می توانید به سادگی بگویید زمان پایان چاپ منهای
596
00:18:46,000 –> 00:18:47,200
زمان شروع
597
00:18:47,200 –> 00:18:49,200
خوب است اگر فقط بگویید زمان پایان چاپ
598
00:18:49,200 –> 00:18:51,280
منهای زمان شروع،
599
00:18:51,280 –> 00:18:53,200
چقدر زمان از این زمان چاپ می شود. از
600
00:18:53,200 –> 00:18:55,200
زمانی که این خط اجرا شد تا زمانی که
601
00:18:55,200 –> 00:18:56,960
این خط اجرا شد در بین آنچه
602
00:18:56,960 –> 00:18:57,520
اتفاق افتاد،
603
00:18:57,520 –> 00:19:00,080
کل این تابع به درستی اجرا شد،
604
00:19:00,080 –> 00:19:02,000
بنابراین اساساً مدت زمانی را که
605
00:19:02,000 –> 00:19:03,360
طول کشید تا این تابع در ثانیه اجرا شود اندازهگیری میکند،
606
00:19:03,360 –> 00:19:06,720
پس این همه چیز خوب است،
607
00:19:06,720 –> 00:19:08,840
زیرا ما انجام ندادهایم. چیزی در مورد
608
00:19:08,840 –> 00:19:11,120
چند پردازشی گفتم کامپیوتر من دارای شش
609
00:19:11,120 –> 00:19:11,840
610
00:19:11,840 –> 00:19:14,880
هسته راست، یک هسته دو و به همین ترتیب
611
00:19:14,880 –> 00:19:16,640
دارای شش هسته است همانطور که
612
00:19:16,640 –> 00:19:17,679
چندی پیش دیدیم درست است،
613
00:19:17,679 –> 00:19:19,679
بنابراین کل کد قرار است روی یک شرکت پردازشی اجرا شود.
614
00:19:19,679 –> 00:19:22,080
615
00:19:22,080 –> 00:19:23,360
خوب، فقط روی یک کد پردازشی اجرا میشود،
616
00:19:23,360 –> 00:19:26,000
خیلی ساده است،
617
00:19:26,000 –> 00:19:27,919
همه کدهای پردازشی دیگر
618
00:19:27,919 –> 00:19:29,039
هیچ اتفاقی نمیافتد یا برخی دیگر،
619
00:19:29,039 –> 00:19:31,039
قطعه کد دیگری یا
620
00:19:31,039 –> 00:19:32,960
فرآیند دیگری در آنجا اجرا میشود،
621
00:19:32,960 –> 00:19:34,799
نگران نباشید، بنابراین همه اینها
622
00:19:34,799 –> 00:19:36,080
در حال اجرا هستند روی یک
623
00:19:36,080 –> 00:19:39,760
هسته از شش سیپیوی من، یک هسته از
624
00:19:39,760 –> 00:19:41,760
میان شش سیپیسی که روی
625
00:19:41,760 –> 00:19:44,960
کل تراشهی سیپیوی من دارم، تراشه اینتل i7 درست است، پس
626
00:19:44,960 –> 00:19:46,520
چقدر زمان برد،
627
00:19:46,520 –> 00:19:49,679
20.90 ثانیه طول کشید، خب این
628
00:19:49,679 –> 00:19:51,440
کد استانداردی است که شما مینویسید این است.
629
00:19:51,440 –> 00:19:54,720
کد تک رشته ای تک هسته ای خود
630
00:19:54,720 –> 00:19:56,400
را که کد استانداردی را نوشته اید
631
00:19:56,400 –> 00:19:58,640
که می نویسید و همچنین
632
00:19:58,640 –> 00:19:59,679
میانگین میانگین
633
00:19:59,679 –> 00:20:02,400
نزدیک به 0.5 را چاپ می کند، زیرا همه این
634
00:20:02,400 –> 00:20:04,000
اعداد از یک توزیع خاص تولید می شوند
635
00:20:04,000 –> 00:20:04,960
636
00:20:04,960 –> 00:20:07,039
و میانگین نصف اوکی است زیرا
637
00:20:07,039 –> 00:20:09,440
اعداد را از آن تولید می کند. صفر تا یک
638
00:20:09,440 –> 00:20:12,000
خوب است بنابراین
639
00:20:12,000 –> 00:20:13,679
مولد اعداد تصادفی numpy اعداد از
640
00:20:13,679 –> 00:20:14,720
صفر تا
641
00:20:14,720 –> 00:20:16,880
642
00:20:16,880 –> 00:20:18,880
یک را تولید می
643
00:20:18,880 –> 00:20:20,080
644
00:20:20,080 –> 00:20:23,679
کند. حالا 20.9 ثانیه اگر
645
00:20:23,679 –> 00:20:25,600
بخواهم سرعتش را بالا ببرم چه کار کنم
646
00:20:25,600 –> 00:20:26,960
خوب است پس بیایید یک رویکرد بسیار ساده در
647
00:20:26,960 –> 00:20:28,880
پیش بگیریم خوب دوباره سعی می کنیم
648
00:20:28,880 –> 00:20:31,360
من فقط در مورد سیستم های موازی سازی ساده به شما می گویم در
649
00:20:31,360 –> 00:20:33,200
اینجا
650
00:20:33,200 –> 00:20:35,120
دوباره الگوریتم های موازی زیادی وجود دارد
651
00:20:35,120 –> 00:20:36,720
652
00:20:36,720 –> 00:20:39,919
که یک موضوع کامل است به سمت خودش درست است، بنابراین
653
00:20:39,919 –> 00:20:41,520
ما به الگوریتمهای موازی پیشرفته
654
00:20:41,520 –> 00:20:42,960
و چیزهایی مانند چیزهای بسیار
655
00:20:42,960 –> 00:20:44,159
ساده نمیرویم،
656
00:20:44,159 –> 00:20:46,000
شما 100 میلیون عدد
657
00:20:46,000 –> 00:20:47,440
دارید که میخواهید میانگین
658
00:20:47,440 –> 00:20:50,400
بسیار ساده
659
00:20:50,400 –> 00:20:51,280
660
00:20:51,280 –> 00:20:54,640
661
00:20:54,640 –> 00:20:57,760
را محاسبه کنید. دوم 50 میلیون در هسته یک
662
00:20:57,760 –> 00:20:59,440
نگاه به این من چند کد
663
00:20:59,440 –> 00:21:02,080
دارم درست من شش هسته روی جعبه خود دارم
664
00:21:02,080 –> 00:21:04,640
درست روی هسته اول ما
665
00:21:04,640 –> 00:21:07,200
میانگین 50 میلیون عدد را
666
00:21:07,200 –> 00:21:09,360
در هسته دوم محاسبه خواهیم کرد میانگین 50 میلیون عدد دوم را محاسبه خواهیم کرد.
667
00:21:09,360 –> 00:21:11,440
668
00:21:11,440 –> 00:21:13,679
درست است، پس تصور کنید اگر این کل من باشد اگر
669
00:21:13,679 –> 00:21:14,799
این
670
00:21:14,799 –> 00:21:18,240
آرایه numpy من باشد، 50 میلیون اولی
671
00:21:18,240 –> 00:21:19,760
که میانگین آنها را روی هسته 1 محاسبه می کنیم
672
00:21:19,760 –> 00:21:21,919
و 50 میلیون دوم را
673
00:21:21,919 –> 00:21:23,520
روی کد 2 محاسبه می کنیم.
674
00:21:23,520 –> 00:21:25,280
میانگین این اعداد
675
00:21:25,280 –> 00:21:27,200
بر روی
676
00:21:27,200 –> 00:21:29,280
هسته 1 محاسبه می
677
00:21:29,280 –> 00:21:30,559
678
00:21:30,559 –> 00:21:32,400
679
00:21:32,400 –> 00:21:35,760
680
00:21:35,760 –> 00:21:38,080
681
00:21:38,080 –> 00:21:40,240
682
00:21:40,240 –> 00:21:40,640
683
00:21:40,640 –> 00:21:43,600
شود. این هسته فرض کنید بزرگنمایی کنید پس ما
684
00:21:43,600 –> 00:21:45,360
50 میلیون عدد به هسته 150
685
00:21:45,360 –> 00:21:46,559
میلیون به هسته دو دادیم
686
00:21:46,559 –> 00:21:49,200
پس هسته اول فرض کنیم m1 core
687
00:21:49,200 –> 00:21:50,960
2 m2 را برمی گرداند
688
00:21:50,960 –> 00:21:53,039
درست چگونه میانگین 100
689
00:21:53,039 –> 00:21:54,880
میلیون عدد داده شده m1 و m2 را محاسبه
690
00:21:54,880 –> 00:21:57,039
می کنید و فقط میانگین را می گیرید.
691
00:21:57,039 –> 00:21:58,960
اگر m1 به اضافه m2 را با 2 در
692
00:21:58,960 –> 00:22:00,559
نظر بگیرید، میانگین کل 100
693
00:22:00,559 –> 00:22:02,080
میلیون عدد را
694
00:22:02,080 –> 00:22:04,080
درست به دست می آورید، بنابراین این دوباره یک مثال بسیار ساده
695
00:22:04,080 –> 00:22:06,400
از یک کد قابل موازی سازی
696
00:22:06,400 –> 00:22:07,520
697
00:22:07,520 –> 00:22:10,960
ساده است، درست مثال بسیار ساده، اکنون
698
00:22:10,960 –> 00:22:13,520
الگوریتم های موازی طراحی الگوریتم های موازی
699
00:22:13,520 –> 00:22:14,720
700
00:22:14,720 –> 00:22:18,559
است.
701
00:22:18,559 –> 00:22:19,840
حداقل چند فصل از
702
00:22:19,840 –> 00:22:21,200
آن را دیده ام و خوانده ام، کتاب هایی در مورد الگوریتم های موازی نوشته شده
703
00:22:21,200 –> 00:22:23,760
است، بسیار خوب، من به عنوان یک دانشجوی کارشناسی ارشد یک دوره آموزشی در مورد
704
00:22:23,760 –> 00:22:25,280
الگوریتم های موازی گذرانده ام،
705
00:22:25,280 –> 00:22:26,240
706
00:22:26,240 –> 00:22:28,000
بنابراین این یک موضوع کامل است.
707
00:22:28,000 –> 00:22:31,039
بنابراین ما روی چیزهای سادهتر تمرکز میکنیم،
708
00:22:31,039 –> 00:22:33,840
چیزهای معمولیتر بسیار خوب است، اما
709
00:22:33,840 –> 00:22:35,360
ما همچنین به نحوه
710
00:22:35,360 –> 00:22:36,640
استفاده از الگوریتمهای موازی
711
00:22:36,640 –> 00:22:38,720
برای کارهای یادگیری ماشینی
712
00:22:38,720 –> 00:22:40,799
کمی بعداً در خود این جلسه اشاره خواهیم کرد،
713
00:22:40,799 –> 00:22:43,520
خوب فقط صبور باشید، ما به آنجا میرویم،
714
00:22:43,520 –> 00:22:45,600
خب حالا چگونه آیا می دانید این منطق
715
00:22:45,600 –> 00:22:46,480
درست است،
716
00:22:46,480 –> 00:22:48,720
ما منطق را شکست دادیم که 50 میلیون 50
717
00:22:48,720 –> 00:22:50,480
میلیون را محاسبه کنید و
718
00:22:50,480 –> 00:22:52,480
میانگین کلی کد بسیار ساده را
719
00:22:52,480 –> 00:22:54,000
در نظر بگیرید، حالا چگونه می توانید کل این
720
00:22:54,000 –> 00:22:55,679
موضوع را به کد تبدیل کنید حالا بیایید چند
721
00:22:55,679 –> 00:22:56,880
کد ساده برای این
722
00:22:56,880 –> 00:22:58,400
کار ببینیم. میخواهید این کار را در پایتون انجام
723
00:22:58,400 –> 00:23:00,240
دهید، بگذارید بگوییم خوب است زیرا این
724
00:23:00,240 –> 00:23:02,640
زبان محبوبترین زبان برای دانشمند داده و
725
00:23:02,640 –> 00:23:04,320
دانشآموزان یادگیری ماشین است،
726
00:23:04,320 –> 00:23:07,600
بنابراین این صفحه بسیار خوبی است
727
00:23:07,600 –> 00:23:08,000
که باید
728
00:23:08,000 –> 00:23:11,280
بخوانید این اسناد رسمی
729
00:23:11,280 –> 00:23:13,679
است این اسناد رسمی برای
730
00:23:13,679 –> 00:23:15,760
کتابخانهای است به نام پردازش چندگانه
731
00:23:15,760 –> 00:23:18,240
در پایتون این موضوع را به شما می گوید منظورم
732
00:23:18,240 –> 00:23:20,240
این است که این یک سند بسیار طولانی
733
00:23:20,240 –> 00:23:21,280
است
734
00:23:21,280 –> 00:23:23,679
و جزئیات زیادی را با مثال های بسیار زیبا به شما می گوید،
735
00:23:23,679 –> 00:23:25,360
736
00:23:25,360 –> 00:23:27,360
بنابراین اگر می خواهید غواصی کنید عمیقاً در مورد اینکه چگونه
737
00:23:27,360 –> 00:23:29,919
چند پردازش را می توان به
738
00:23:29,919 –> 00:23:32,480
درستی انجام داد بهترین مکان خواندن این است که
739
00:23:32,480 –> 00:23:33,840
هیچ چیز بهتر از این نیست، منظورم این است که این یکی
740
00:23:33,840 –> 00:23:34,480
از بهترین
741
00:23:34,480 –> 00:23:36,559
مکان ها است، اما همچنین بسیار
742
00:23:36,559 –> 00:23:37,520
جامع
743
00:23:37,520 –> 00:23:39,200
است این برای یادگیری ماشین
744
00:23:39,200 –> 00:23:40,480
و کارهای علم داده نوشته نشده است.
745
00:23:40,480 –> 00:23:41,440
برای همه
746
00:23:41,440 –> 00:23:43,279
حتی برای مهندسان نرم افزار نوشته شده است،
747
00:23:43,279 –> 00:23:45,440
بنابراین می تواند کمی دلهره
748
00:23:45,440 –> 00:23:47,039
آور باشد، اگر شما پایه های
749
00:23:47,039 –> 00:23:48,720
مهندسی نرم افزار قوی یا
750
00:23:48,720 –> 00:23:51,279
علوم کامپیوتر ندارید، خوب است، اما
751
00:23:51,279 –> 00:23:51,760
بیایید ببینیم
752
00:23:51,760 –> 00:23:53,360
من سعی می کنم کل این کار را برای
753
00:23:53,360 –> 00:23:55,919
شما ساده کنم، خب، بیایید بیایید سعی کنیم به دنبال آن برویم،
754
00:23:55,919 –> 00:23:58,720
بنابراین این ماژول یا کتابخانه وجود دارد
755
00:23:58,720 –> 00:23:59,919
به نام چند پردازش،
756
00:23:59,919 –> 00:24:03,039
بنابراین از چند پردازش ما دو چیز را وارد می کنیم
757
00:24:03,039 –> 00:24:05,200
که یکی فرآیند نامیده می شود،
758
00:24:05,200 –> 00:24:07,120
دیگری یک صف است،
759
00:24:07,120 –> 00:24:09,520
خوب است، به شما می گویم که چرا به یک صف نیاز داریم،
760
00:24:09,520 –> 00:24:10,559
خوب توضیح می دهم شما
761
00:24:10,559 –> 00:24:12,320
هدف از یک صف در اینجا چیست،
762
00:24:12,320 –> 00:24:16,480
اما این را به خاطر بسپارید ایده اصلی در
763
00:24:16,480 –> 00:24:18,240
اینجا آن چیزها کجاست، ایده اصلی
764
00:24:18,240 –> 00:24:19,600
اینجاست
765
00:24:19,600 –> 00:24:21,679
زیرا ما می خواهیم این را به درستی به دو
766
00:24:21,679 –> 00:24:23,840
کار تقسیم کنیم، بنابراین دو فرآیند حرفه ای ایجاد خواهیم کرد.
767
00:24:23,840 –> 00:24:24,960
768
00:24:24,960 –> 00:24:28,480
cess one اجرا می شود در هسته یک فرآیند دو
769
00:24:28,480 –> 00:24:30,400
اجرا در هسته دو
770
00:24:30,400 –> 00:24:33,200
فرآیند یک باید 50
771
00:24:33,200 –> 00:24:35,679
میلیون عدد اول را بگیرد و میانگین
772
00:24:35,679 –> 00:24:39,360
فرآیند را به باید محاسبه
773
00:24:39,360 –> 00:24:41,279
میانگین 50 میلیون عدد دوم برگرداند بنابراین
774
00:24:41,279 –> 00:24:43,919
ما فقط از دو فرآیند استفاده می کنیم
775
00:24:43,919 –> 00:24:45,039
که در آن هر فرآیند
776
00:24:45,039 –> 00:24:47,279
روی هر هسته اجرا می شود خوب است، ما فقط از
777
00:24:47,279 –> 00:24:48,799
دو هسته استفاده می کنیم، شما می توانید این را به شش هسته گسترش دهید،
778
00:24:48,799 –> 00:24:50,000
همچنین به
779
00:24:50,000 –> 00:24:51,360
این دلیل که این کامپیوتر دارای شش کد است، شما
780
00:24:51,360 –> 00:24:53,200
می توانید آن را انجام دهید خوب، بیایید ساده ترین
781
00:24:53,200 –> 00:24:54,640
روش را برای دوره
782
00:24:54,640 –> 00:24:57,200
خوب انجام دهیم، بنابراین در اینجا ما یک
783
00:24:57,200 –> 00:24:58,400
تابع let را تعریف می کنیم من توضیح می دهم که چگونه این
784
00:24:58,400 –> 00:24:59,679
تابع به خوبی کار می
785
00:24:59,679 –> 00:25:01,760
کند در واقع قبل از اینکه به
786
00:25:01,760 –> 00:25:03,440
تابع برویم okay قبل از اینکه وارد
787
00:25:03,440 –> 00:25:04,720
تابع
788
00:25:04,720 –> 00:25:05,919
شویم، اجازه دهید در واقع چند دقیقه دیگر به این تابع برگردیم،
789
00:25:05,919 –> 00:25:07,919
خوب اول
790
00:25:07,919 –> 00:25:09,440
اجازه دهید چند متغیر را ببینیم که من فقط
791
00:25:09,440 –> 00:25:11,919
در اینجا تعریف می کنم. متغیر n1 نامیده می شود
792
00:25:11,919 –> 00:25:12,640
793
00:25:12,640 –> 00:25:15,679
که طبقه نقطه ریاضی است خوب است اساساً
794
00:25:15,679 –> 00:25:18,799
شما n دارید شما n
795
00:25:18,799 –> 00:25:21,440
عدد دارید در اینجا ما فقط می گیریم و
796
00:25:21,440 –> 00:25:23,440
0 به n در 2
797
00:25:23,440 –> 00:25:25,360
خوب این n در 2 ما
798
00:25:25,360 –> 00:25:26,880
کف آن را می گیریم زیرا و باید یک
799
00:25:26,880 –> 00:25:27,360
مقدار صحیح باشد
800
00:25:27,360 –> 00:25:30,080
و ما به آنها زنگ می زنیم،
801
00:25:40,640 –> 00:25:45,120
اوه، من سعی می کنم به اینجا برگردم،
802
00:25:45,360 –> 00:25:49,840
اجازه دهید فقط آن را در تلفنم و همچنین [Music] چک کنم،
803
00:25:51,700 –> 00:25:54,789
804
00:25:55,600 –> 00:25:57,919
بنابراین من دوباره وصل شدم، فقط می خواستم
805
00:25:57,919 –> 00:26:00,960
بررسی کنم که آیا شما می توانید
806
00:26:00,960 –> 00:26:04,320
به من گوش کن خیلی خوب ممنون
807
00:26:04,320 –> 00:26:06,720
خوب خوب خوب ما فقط منتظر می
808
00:26:06,720 –> 00:26:08,720
مانیم تا بافر تثبیت شود
809
00:26:08,720 –> 00:26:12,640
و بعد آره نگران نباش من
810
00:26:12,640 –> 00:26:14,000
در پنج دقیقه گذشته چیزی نگفتم
811
00:26:14,000 –> 00:26:16,559
زیرا در پایان کارم قطع برق بود
812
00:26:16,559 –> 00:26:19,039
و خوشبختانه متوجه شدم بعد
813
00:26:19,039 –> 00:26:20,240
از چند دقیقه برق برگشت و من توانستم
814
00:26:20,240 –> 00:26:22,320
دوباره به همان جلسه زنده وصل
815
00:26:22,320 –> 00:26:24,400
شوم، بسیار عالی، عالی است، پس بیایید از همان
816
00:26:24,400 –> 00:26:25,679
جایی که متوقف کردیم ادامه دهیم،
817
00:26:25,679 –> 00:26:29,120
اوه اوکی، یک ثانیه کجا بودیم،
818
00:26:29,120 –> 00:26:32,400
آه پس ما اینجا بودیم،
819
00:26:32,400 –> 00:26:33,200
820
00:26:33,200 –> 00:26:36,640
خیلی خوب، خوب حالا شما می توانید صدای من را بشنوید
821
00:26:36,640 –> 00:26:38,000
که خوب است، خوب است، پس
822
00:26:38,000 –> 00:26:39,919
بیایید ادامه دهیم از همان جایی که متوقف
823
00:26:39,919 –> 00:26:42,480
824
00:26:42,480 –> 00:26:44,320
825
00:26:44,320 –> 00:26:47,200
826
00:26:47,200 –> 00:26:48,799
827
00:26:48,799 –> 00:26:50,159
شدیم با عرض پوزش به خاطر مشکلی که از کنترل من خارج است و همچنین بسیار خوب است، بنابراین این حق n1 شماست، بنابراین آنچه ما می خواهیم ایجاد کنیم، بنابراین ما فقط در حال ایجاد یک متغیری
828
00:26:50,159 –> 00:26:52,960
در اینجا n1 نامیده می شود و بنابراین اولین فرآیند
829
00:26:52,960 –> 00:26:56,159
شما پردازش خواهد شد از 0 تا n1 به این نگاه
830
00:26:56,159 –> 00:26:57,919
کنید اولین فرآیند شما p1
831
00:26:57,919 –> 00:27:01,919
محاسبه خواهد شد یعنی 1 از 0 تا
832
00:27:01,919 –> 00:27:04,640
n1 دومین فرآیند p2 شما از
833
00:27:04,640 –> 00:27:06,400
n1 به اضافه 1
834
00:27:06,400 –> 00:27:09,520
تا n منهای 1
835
00:27:09,520 –> 00:27:11,039
836
00:27:11,039 –> 00:27:12,720
محاسبه خواهد شد. من فقط دارم
837
00:27:12,720 –> 00:27:14,640
تعریف می کنم که کاملاً
838
00:27:14,640 –> 00:27:17,919
خوب است پس بیایید قدم به قدم پیش برویم
839
00:27:17,919 –> 00:27:19,600
بنابراین در اینجا من چیزی به نام مکعب ایجاد می کنم
840
00:27:19,600 –> 00:27:22,399
اکنون به یاد داشته باشید که این صف چیست
841
00:27:22,399 –> 00:27:25,039
وجود چند صف در پایتون q
842
00:27:25,039 –> 00:27:26,799
یک ساختار داده بسیار محبوب است
843
00:27:26,799 –> 00:27:29,520
که بسیاری افراد cs یاد میگیرند اما صفی
844
00:27:29,520 –> 00:27:30,720
که ما وارد میکنیم،
845
00:27:30,720 –> 00:27:33,919
846
00:27:33,919 –> 00:27:35,440
صفی است که از چند پردازش وارد میکنیم، بنابراین یک صف است که ما
847
00:27:35,440 –> 00:27:37,440
از ماژول چند پردازشی وارد میکنیم
848
00:27:37,440 –> 00:27:39,440
نه از نوع ساختارهای داده معمولی
849
00:27:39,440 –> 00:27:41,600
ماژولها، بنابراین این
850
00:27:41,600 –> 00:27:43,600
صف توسط کتابخانه چند پردازشی
851
00:27:43,600 –> 00:27:44,720
852
00:27:44,720 –> 00:27:46,960
برای ما ارائه میشود. برای برقراری ارتباط بین چندین
853
00:27:46,960 –> 00:27:48,320
فرآیند
854
00:27:48,320 –> 00:27:51,200
خوب است، بنابراین آنچه در اینجا انجام خواهیم داد دوباره این
855
00:27:51,200 –> 00:27:51,600
856
00:27:51,600 –> 00:27:53,440
است که این q یک ساختار داده بسیار مهم
857
00:27:53,440 –> 00:27:55,360
است، بنابراین آنچه که ما در اینجا انجام
858
00:27:55,360 –> 00:27:56,880
خواهیم داد به شرح زیر
859
00:27:56,880 –> 00:27:58,399
860
00:27:58,399 –> 00:28:01,120
است. بسیار مفید است زیرا
861
00:28:01,120 –> 00:28:02,240
هنگامی که این فرآیند یک را
862
00:28:02,240 –> 00:28:04,320
محاسبه می کند، بنابراین این فرآیند
863
00:28:04,320 –> 00:28:06,159
فرض می کنیم که محاسبه به معنای یک است،
864
00:28:06,159 –> 00:28:09,520
ما می نویسیم که در این q
865
00:28:09,520 –> 00:28:12,399
بسیار خوب است، بنابراین q شما می توانید آن را به عنوان
866
00:28:12,399 –> 00:28:12,799
اساسی در نظر
867
00:28:12,799 –> 00:28:14,480
بگیرید، می توانید q را یکی از ساده ترین
868
00:28:14,480 –> 00:28:16,320
راه های فکر کردن در مورد q در نظر بگیرید. آیا
869
00:28:16,320 –> 00:28:19,919
q مانند یک لیست است درست است، اما هر چیزی
870
00:28:19,919 –> 00:28:21,039
که ابتدا درج شود،
871
00:28:21,039 –> 00:28:24,159
پس دوباره q این دو عملگر دو
872
00:28:24,159 –> 00:28:25,200
عملگر به نام های
873
00:28:25,200 –> 00:28:28,640
nq و dq دارد، باز هم
874
00:28:28,640 –> 00:28:30,080
کسانی از شما که علوم کامپیوتر خوانده اید
875
00:28:30,080 –> 00:28:32,080
این را درست می دانید، می توانید
876
00:28:32,080 –> 00:28:33,360
صف را
877
00:28:33,360 –> 00:28:36,559
به عنوان یک لیست بسیار ساده در نظر بگیرید.
878
00:28:36,559 –> 00:28:38,159
که این دو عملیات
879
00:28:38,159 –> 00:28:40,480
را دارد، تصور کنید، بنابراین بیایید
880
00:28:40,480 –> 00:28:42,480
این صف را در اینجا به طور کلی فراموش کنیم
881
00:28:42,480 –> 00:28:44,640
آنچه که با صف ها اتفاق می افتد به شرح زیر است،
882
00:28:44,640 –> 00:28:46,480
خوب فرض کنید یک عدد را وارد می کنیم،
883
00:28:46,480 –> 00:28:47,679
مثلاً 10،
884
00:28:47,679 –> 00:28:50,159
بنابراین یک عدد 10 را در صف قرار
885
00:28:50,159 –> 00:28:52,399
می دهیم، سپس یک عدد را در صف قرار می دهیم. بگوییم 12
886
00:28:52,399 –> 00:28:54,799
سپس عدد 14 را در صف قرار می دهیم. حالا وقتی
887
00:28:54,799 –> 00:28:56,559
از صف
888
00:28:56,559 –> 00:28:58,480
می گذارید، اولین عددی که وارد صف شده است، اولین عددی است که در
889
00:28:58,480 –> 00:29:00,080
صف قرار
890
00:29:00,080 –> 00:29:01,440
می گیرد،
891
00:29:01,440 –> 00:29:03,200
892
00:29:03,200 –> 00:29:05,440
بسیار خوب، بنابراین از صف ها در نرم افزار استفاده می شود.
893
00:29:05,440 –> 00:29:07,120
برای مثال تصور کنید میخواهید
894
00:29:07,120 –> 00:29:07,919
895
00:29:07,919 –> 00:29:09,919
چند بلیط قطار یا بلیط هواپیما رزرو کنید و
896
00:29:09,919 –> 00:29:11,120
مواردی از این قبیل
897
00:29:11,120 –> 00:29:12,799
در بسیاری از این سیستمهای دنیای واقعی از صفهای درست استفاده میشود،
898
00:29:12,799 –> 00:29:14,640
899
00:29:14,640 –> 00:29:17,600
بنابراین ما در این مورد از q
900
00:29:17,600 –> 00:29:19,679
برای آن هدف خاص استفاده نمیکنیم.
901
00:29:19,679 –> 00:29:22,159
خوب پس q یک صف است که اغلب به
902
00:29:22,159 –> 00:29:23,440
عنوان اولین در
903
00:29:23,440 –> 00:29:26,159
اولین ساختار داده نوشته می شود، بنابراین هر
904
00:29:26,159 –> 00:29:28,159
مقداری که ابتدا درج
905
00:29:28,159 –> 00:29:29,919
شود، همان مقادیری خواهد بود که خروجی خواهد شد
906
00:29:29,919 –> 00:29:31,600
همچنین اولاً
907
00:29:31,600 –> 00:29:33,919
خوب این همان چیزی است که q است، اما در اینجا
908
00:29:33,919 –> 00:29:35,760
چیزی که ما هستیم، قرار نیست
909
00:29:35,760 –> 00:29:37,039
910
00:29:37,039 –> 00:29:39,440
تا آنجایی که به این مثال
911
00:29:39,440 –> 00:29:40,320
مربوط می شود از صف برای اولین در اولین خروجی استفاده کنید،
912
00:29:40,320 –> 00:29:42,960
بنابراین برای ما یک صف اساساً
913
00:29:42,960 –> 00:29:44,720
مجموعه ای از
914
00:29:44,720 –> 00:29:47,840
مقادیر است دوباره این m1،
915
00:29:47,840 –> 00:29:50,080
بنابراین به محض اینکه این فرآیند این را محاسبه کرد به این
916
00:29:50,080 –> 00:29:52,720
معنی است که 1 آن را در صف
917
00:29:52,720 –> 00:29:55,120
قرار می دهد. به محض اینکه این فرآیند برای محاسبه معنی
918
00:29:55,120 –> 00:29:57,679
2 آن را در صف قرار می دهد
919
00:29:57,679 –> 00:30:00,159
و این q به دلیل اینکه به عنوان
920
00:30:00,159 –> 00:30:02,159
بخشی از چند پردازش
921
00:30:02,159 –> 00:30:04,000
پیاده سازی می شود به یاد داشته باشید که این به عنوان بخشی از کتابخانه چند پردازشی پیاده سازی شده است.
922
00:30:04,000 –> 00:30:06,080
923
00:30:06,080 –> 00:30:08,799
nd فرآیند ایمن
924
00:30:08,799 –> 00:30:10,080
اکنون ممکن است بگویید هی این موضوع چیست
925
00:30:10,080 –> 00:30:12,000
و پردازنده
926
00:30:12,000 –> 00:30:15,039
یکی از بزرگترین مشکلاتی است
927
00:30:15,039 –> 00:30:17,279
که در سیستم چند پردازنده ای
928
00:30:17,279 –> 00:30:18,960
درست وجود دارد، بنابراین تصور کنید اگر چندین پردازش دارید،
929
00:30:18,960 –> 00:30:20,240
930
00:30:20,240 –> 00:30:22,000
همه آنها سعی می کنند روی
931
00:30:22,000 –> 00:30:24,240
چیزی بنویسند که یکی از بزرگترین مشکلات
932
00:30:24,240 –> 00:30:26,080
است. شما معمولاً با این مواجه می شوید
933
00:30:26,080 –> 00:30:28,000
که اگر فرآیند یک بخواهد چیزی بنویسد
934
00:30:28,000 –> 00:30:30,000
در حالی که فرآیند دو نیز سعی می کند
935
00:30:30,000 –> 00:30:32,080
همان چیزی را نادیده بگیرد،
936
00:30:32,080 –> 00:30:34,880
بنابراین
937
00:30:34,880 –> 00:30:37,120
وقتی چندین پردازش یا حتی چندین
938
00:30:37,120 –> 00:30:38,000
رشته در آن دارید مشکل بزرگی وجود دارد که
939
00:30:38,000 –> 00:30:40,240
در آن نمونه درست فرض کنید اگر
940
00:30:40,240 –> 00:30:42,159
این سعی می کند m1 بنویسد در حالی که
941
00:30:42,159 –> 00:30:43,840
سعی می کند m1 بنویسد
942
00:30:43,840 –> 00:30:46,480
اگر p2 نیز بخواهد m2 بنویسد چه
943
00:30:46,480 –> 00:30:46,960
اتفاقی می افتد
944
00:30:46,960 –> 00:30:48,960
بنابراین در این مکان m1 قرار می گیرد یا
945
00:30:48,960 –> 00:30:50,880
m2 درست قرار می گیرد
946
00:30:50,880 –> 00:30:53,520
بنابراین
947
00:30:53,520 –> 00:30:54,960
مشکلات بسیار استاندارد زیادی وجود دارد که شما
948
00:30:54,960 –> 00:30:55,760
با این کل مواجه خواهید شد.
949
00:30:55,760 –> 00:30:57,760
موضوع در
950
00:30:57,760 –> 00:30:59,120
کل ایده ارتباط بین فرآیندی
951
00:30:59,120 –> 00:31:00,799
است که معمولاً
952
00:31:00,799 –> 00:31:02,080
توسط افراد علم کامپیوتر
953
00:31:02,080 –> 00:31:05,279
در سیستم عامل ها مورد مطالعه
954
00:31:05,279 –> 00:31:07,039
قرار می گیرد.
955
00:31:07,039 –> 00:31:09,440
جزئیات rnal کاری که یک صف انجام می دهد این است که
956
00:31:09,440 –> 00:31:11,200
q می گوید زیرا این صف به
957
00:31:11,200 –> 00:31:13,120
عنوان بخشی از کتابخانه چند پردازشی پیاده سازی شده است و
958
00:31:13,120 –> 00:31:13,679
می گوید
959
00:31:13,679 –> 00:31:16,880
نگران نباشید فقط فشار دهید یا
960
00:31:16,880 –> 00:31:19,360
فقط چیزهایی را در من در صف قرار دهید
961
00:31:19,360 –> 00:31:20,240
من مطمئن خواهم شد
962
00:31:20,240 –> 00:31:22,960
که چیزها به درستی قرار می گیرند.
963
00:31:22,960 –> 00:31:24,240
اجرا خواهد شد بنابراین این
964
00:31:24,240 –> 00:31:26,240
صف به عنوان بخشی از چند پردازش
965
00:31:26,240 –> 00:31:27,919
به گونه ای پیاده سازی می شود
966
00:31:27,919 –> 00:31:30,559
که چندین فرآیند می توانند داده ها
967
00:31:30,559 –> 00:31:31,519
را
968
00:31:31,519 –> 00:31:33,519
بدون نگرانی در مورد بازنویسی روی
969
00:31:33,519 –> 00:31:35,039
دیگران و مواردی از این قبیل در صف بنویسند، بنابراین
970
00:31:35,039 –> 00:31:36,240
همه اینها
971
00:31:36,240 –> 00:31:38,000
با استفاده از یک سری مفاهیم در
972
00:31:38,000 –> 00:31:40,480
سیستم عامل ها توسط این صف انجام می شود. پیاده سازی
973
00:31:40,480 –> 00:31:42,320
خوب است، بنابراین لازم نیست نگران
974
00:31:42,320 –> 00:31:44,080
همه قسمت های داخلی نحوه کار آن باشید،
975
00:31:44,080 –> 00:31:45,760
اما البته اگر دانشجوی cs
976
00:31:45,760 –> 00:31:47,360
هستید، اگر در فرآیند
977
00:31:47,360 –> 00:31:48,960
ارتباطات و سیستم عامل ها مطالعه
978
00:31:48,960 –> 00:31:51,120
کرده اید، اتصال نقطه ها
979
00:31:51,120 –> 00:31:52,240
خوب است.
980
00:31:52,240 –> 00:31:54,559
از این صف استفاده خواهد کرد این است
981
00:31:54,559 –> 00:31:56,320
که از این
982
00:31:56,320 –> 00:31:59,200
q برای حذف میانگین یک و دو استفاده خواهیم کرد،
983
00:31:59,200 –> 00:32:00,080
بنابراین این همان
984
00:32:00,080 –> 00:32:02,799
چیزی است که در حال حاضر داریم، بنابراین اکنون اجازه دهید به
985
00:32:02,799 –> 00:32:03,679
این تابع نگاه
986
00:32:03,679 –> 00:32:06,799
کنیم تا ایجاد کنیم d n1 ما یک صف ایجاد کردیم که این صف
987
00:32:06,799 –> 00:32:07,600
988
00:32:07,600 –> 00:32:09,919
این است که یک رشته ایمن و پردازشی است
989
00:32:09,919 –> 00:32:11,760
که به این معنی است که چندین فرآیند می توانند
990
00:32:11,760 –> 00:32:13,519
با خیال راحت روی آن بنویسند بدون اینکه
991
00:32:13,519 –> 00:32:14,799
نگران تداخل
992
00:32:14,799 –> 00:32:17,039
یا بازنویسی یکدیگر باشند، اساساً
993
00:32:17,039 –> 00:32:18,880
به طور خلاصه معنی آن
994
00:32:18,880 –> 00:32:20,559
995
00:32:20,559 –> 00:32:21,760
همین است. به نام زیرخط
996
00:32:21,760 –> 00:32:23,200
چند پردازشی متوسط
997
00:32:23,200 –> 00:32:26,559
ع شده است، زیرا شما d سم
998
00:32:26,559 –> 00:32:30,240
راست خود را دارید، کل d خود را از 0 تا n سم
999
00:32:30,240 –> 00:32:32,799
راست دارید، این آرایه بزرگ numpy شماست در
1000
00:32:32,799 –> 00:32:33,840
1001
00:32:33,840 –> 00:32:36,000
ت است، بنابراین چه کاری دارید که می گویید ای
1002
00:32:36,000 –> 00:32:37,600
تابع دوباره اجرا می شود. به
1003
00:32:37,600 –> 00:32:38,799
1004
00:32:38,799 –> 00:32:40,799
مکان شروع، شاخص شروع
1005
00:32:40,799 –> 00:32:43,440
و شاخص پایان بدهید، خوب،
1006
00:32:43,440 –> 00:32:44,799
باید شاخص شروع و شاخص پایانی
1007
00:32:44,799 –> 00:32:45,360
1008
00:32:45,360 –> 00:32:46,880
را بدهید، میانگین تمام
1009
00:32:46,880 –> 00:32:48,480
اعدادی که بین
1010
00:32:48,480 –> 00:32:50,080
شاخص شروع و پایان وجود دارند،
1011
00:32:50,080 –> 00:32:52,640
از جمله هر دوی آنها و هر آنچه که باشد، محاسبه می
1012
00:32:52,640 –> 00:32:54,000
کند. مقدار آن را
1013
00:32:54,000 –> 00:32:56,559
در این صف قرار می دهد بسیار خوب این سه
1014
00:32:56,559 –> 00:32:58,000
پارامتری هستند که شما به این
1015
00:32:58,000 –> 00:32:58,480
میانگین
1016
00:32:58,480 –> 00:32:59,919
به این تابع به نام زیرخط
1017
00:32:59,919 –> 00:33:01,840
mp می پردازید، اکنون به این تابع نگاه کنید. n
1018
00:33:01,840 –> 00:33:02,720
بسیار ساده است،
1019
00:33:02,720 –> 00:33:05,360
ما یک مجموع داریم که در اینجا چه کار می کنیم
1020
00:33:05,360 –> 00:33:06,640
، از
1021
00:33:06,640 –> 00:33:09,760
s به e از شاخص شروع به
1022
00:33:09,760 –> 00:33:10,559
پایان،
1023
00:33:10,559 –> 00:33:12,960
از جمله شاخص پایانی، تکرار می کنیم، به همین دلیل است
1024
00:33:12,960 –> 00:33:13,760
که محدوده
1025
00:33:13,760 –> 00:33:16,640
s2 e به اضافه 1 است، ما همه
1026
00:33:16,640 –> 00:33:18,320
چیزهایی را که در آن است جمع می کنیم.
1027
00:33:18,320 –> 00:33:19,760
هر چیزی را که در این
1028
00:33:19,760 –> 00:33:22,240
آرایه numpy d وجود دارد جمع می کنیم
1029
00:33:22,240 –> 00:33:24,000
و در نهایت داریم میانگین را محاسبه می
1030
00:33:24,000 –> 00:33:25,679
کنیم و می گذاریم
1031
00:33:25,679 –> 00:33:28,880
ببینیم وقتی می گویید q نقطه قرار دهید این برابر است با
1032
00:33:28,880 –> 00:33:29,200
1033
00:33:29,200 –> 00:33:31,360
قرار دادن این مقدار میانگین هر چیزی که
1034
00:33:31,360 –> 00:33:33,279
محاسبه می شود هر چیزی که محاسبه می شود با
1035
00:33:33,279 –> 00:33:36,720
قرار دادن این میانگین مقدار را در صف
1036
00:33:36,720 –> 00:33:38,559
قرار می دهد و آن را برمی گرداند که این همان کاری است که این تابع
1037
00:33:38,559 –> 00:33:41,440
انجام می دهد، بنابراین ما تابعی
1038
00:33:41,440 –> 00:33:44,080
داریم که می فهمد باید
1039
00:33:44,080 –> 00:33:44,799
1040
00:33:44,799 –> 00:33:47,279
داده ها را از ابتدا تا انتهای فهرست
1041
00:33:47,279 –> 00:33:48,320
1042
00:33:48,320 –> 00:33:51,039
پردازش کند و نتیجه را در صف قرار
1043
00:33:51,039 –> 00:33:51,600
1044
00:33:51,600 –> 00:33:53,679
دهد. این را ببینید، بنابراین در اینجا ما در حال
1045
00:33:53,679 –> 00:33:55,279
ایجاد دو فرآیند هستیم
1046
00:33:55,279 –> 00:33:57,440
که چگونه دوباره یک فرآیند ایجاد کنید.
1047
00:33:57,440 –> 00:33:59,039
1048
00:33:59,039 –> 00:34:01,679
1049
00:34:01,679 –> 00:34:05,440
1050
00:34:05,440 –> 00:34:07,679
در این فرآیند
1051
00:34:07,679 –> 00:34:09,119
می خواهیم
1052
00:34:09,119 –> 00:34:11,440
هدف را اجرا کنیم چه تابعی
1053
00:34:11,440 –> 00:34:12,480
را
1054
00:34:12,480 –> 00:34:14,079
می خواهید اجرا کنید می خواهید این تابع به نام
1055
00:34:14,079 –> 00:34:15,760
mean underscore mp
1056
00:34:15,760 –> 00:34:17,040
را
1057
00:34:17,040 –> 00:34:19,040
اجرا کنید.
1058
00:34:19,040 –> 00:34:20,560
این تابع
1059
00:34:20,560 –> 00:34:23,040
برای فرآیند 1 به این نگاه کنید این
1060
00:34:23,040 –> 00:34:23,918
کل داده
1061
00:34:23,918 –> 00:34:26,800
ما است درست ما قبلاً این را برای فرآیند 1
1062
00:34:26,800 –> 00:34:27,918
دیدیم که میخواهیم آن را روی
1063
00:34:27,918 –> 00:34:31,199
0 تا n منهای 1 شاخص اجرا کنیم که شامل n منهای 1
1064
00:34:31,199 –> 00:34:31,918
شاخص
1065
00:34:31,918 –> 00:34:34,639
از 0 تا n منهای 1 و هر
1066
00:34:34,639 –> 00:34:36,480
نتیجهای که باشد ما میخواستیم این صف را در این
1067
00:34:36,480 –> 00:34:37,119
صف قرار
1068
00:34:37,119 –> 00:34:39,119
دهیم، میتوانید این را بهعنوان یک
1069
00:34:39,119 –> 00:34:40,719
منبع اشتراکگذاری
1070
00:34:40,719 –> 00:34:43,119
شده توسط همه فرآیندها در نظر بگیرید که میتوانند دادهها را در آن
1071
00:34:43,119 –> 00:34:44,800
بنویسند، در
1072
00:34:44,800 –> 00:34:47,280
مرحله بعد، فرآیند 2
1073
00:34:47,280 –> 00:34:48,800
1074
00:34:48,800 –> 00:34:52,879
چیست.
1075
00:34:52,879 –> 00:34:55,040
و به این نگاه کنید که فرآیند 2 چیست،
1076
00:34:55,040 –> 00:34:55,918
بنابراین
1077
00:34:55,918 –> 00:34:57,680
از اینجا به اینجا فرآیند 1 است، اجازه دهید من
1078
00:34:57,680 –> 00:34:59,280
از رنگ متفاوتی استفاده کنم
1079
00:34:59,280 –> 00:35:01,680
از اینجا به اینجا، فرآیند 1 از اینجا
1080
00:35:01,680 –> 00:35:03,280
به اینجا فرآیند دو
1081
00:35:03,280 –> 00:35:06,000
فرآیند دو است که از n یک به علاوه
1082
00:35:06,000 –> 00:35:07,040
یک شروع می شود،
1083
00:35:07,040 –> 00:35:08,880
متأسفم این متاسفم s
1084
00:35:08,880 –> 00:35:10,640
n یک نیست متاسفم این n منهای
1085
00:35:10,640 –> 00:35:11,680
یک نیست این n یک
1086
00:35:11,680 –> 00:35:14,880
بد من است بنابراین این n یکی است این n
1087
00:35:14,880 –> 00:35:18,400
یک به علاوه 1 تا n منهای 1 است
1088
00:35:18,400 –> 00:35:20,000
بنابراین قرار است میانگین همه اینها را محاسبه کند
1089
00:35:20,000 –> 00:35:22,800
همه این مقادیر را ارزش گذاری می
1090
00:35:22,800 –> 00:35:26,000
کند، بنابراین تا به حال فرآیندها شروع نشده اند،
1091
00:35:26,000 –> 00:35:26,800
1092
00:35:26,800 –> 00:35:28,640
ما فقط تعریف کرده ایم که می خواهیم
1093
00:35:28,640 –> 00:35:30,480
فرآیندی ایجاد کنیم
1094
00:35:30,480 –> 00:35:32,720
که این تابع را اجرا کند و
1095
00:35:32,720 –> 00:35:34,560
اینها آرگومان های تابعی هستند که
1096
00:35:34,560 –> 00:35:36,079
ما فقط تعریف کردیم که اینها
1097
00:35:36,079 –> 00:35:37,599
فرآیندهایی هستند که می خواهیم اجرا کنیم.
1098
00:35:37,599 –> 00:35:39,599
ما قبلاً صف را ایجاد کرده ایم،
1099
00:35:39,599 –> 00:35:41,359
هنوز فرآیندها را شروع نکرده ایم،
1100
00:35:41,359 –> 00:35:43,760
خوب است، پس بیایید منتظر بمانیم خوب است، بنابراین
1101
00:35:43,760 –> 00:35:45,040
اکنون چگونه اجرا می کنید، بنابراین ما
1102
00:35:45,040 –> 00:35:46,480
تعریف کرده ایم
1103
00:35:46,480 –> 00:35:48,000
که در هر یک از فرآیندها چه چیزی را می خواهیم اجرا کنیم چگونه
1104
00:35:48,000 –> 00:35:50,079
فرآیند را قبل از شروع شروع کنیم.
1105
00:35:50,079 –> 00:35:52,000
فرآیندی که ما میخواهیم یک تایمر راهاندازی کنیم،
1106
00:35:52,000 –> 00:35:54,720
بنابراین زمان پایان زمان شروع، همه
1107
00:35:54,720 –> 00:35:56,320
چیز اساساً میگوید هر چیزی که
1108
00:35:56,320 –> 00:35:57,920
من در اینجا اجرا میکنم، میخواهم زمانبندی
1109
00:35:57,920 –> 00:35:58,400
آن را دریافت
1110
00:35:58,400 –> 00:36:00,160
کنم، زیرا میخواهم اینجا را ببینم که از
1111
00:36:00,160 –> 00:36:02,640
دو فرآیند استفاده میکنم که هر فرآیند روی
1112
00:36:02,640 –> 00:36:03,520
یک هسته اجرا
1113
00:36:03,520 –> 00:36:06,880
میشود. چگونه این سیستم چند فرآیندی
1114
00:36:06,880 –> 00:36:09,280
یا چند هسته ای c چگونه سریعتر است، ما
1115
00:36:09,280 –> 00:36:10,560
می خواهیم دقیقاً آن را اندازه گیری کنیم،
1116
00:36:10,560 –> 00:36:12,880
بنابراین در اینجا می گوییم p1 dot start
1117
00:36:12,880 –> 00:36:15,119
تا لحظه ای که می گویید p1 dot
1118
00:36:15,119 –> 00:36:17,680
start process 1 اجرا می شود
1119
00:36:17,680 –> 00:36:18,960
، چند جزئیات وجود دارد که من
1120
00:36:18,960 –> 00:36:19,920
در عرض یک دقیقه به آنجا خواهم آمد.
1121
00:36:19,920 –> 00:36:22,079
p2 نیز شروع به
1122
00:36:22,079 –> 00:36:24,000
اجرا می
1123
00:36:24,000 –> 00:36:27,599
کند خوب اکنون به این دو خط نگاه کنید p1.join
1124
00:36:27,599 –> 00:36:28,960
و p2.join
1125
00:36:28,960 –> 00:36:31,599
p1.join اساساً به این معنی است که دوباره به یاد داشته باشید
1126
00:36:31,599 –> 00:36:32,079
که
1127
00:36:32,079 –> 00:36:33,760
این کد این کد چیزی
1128
00:36:33,760 –> 00:36:35,440
است که این کد را خط به خط
1129
00:36:35,440 –> 00:36:35,839
1130
00:36:35,839 –> 00:36:37,440
1131
00:36:37,440 –> 00:36:40,400
اجرا می کند و همان فرآیند دیگری در حال اجرا است. این کد خط به خط
1132
00:36:40,400 –> 00:36:42,160
خوب به این نگاه کنید
1133
00:36:42,160 –> 00:36:44,320
این کد نیز باید اجرا شود نه این کد به عنوان
1134
00:36:44,320 –> 00:36:46,000
بخشی از یک فرآیند در
1135
00:36:46,000 –> 00:36:48,640
1136
00:36:48,640 –> 00:36:51,440
حال اجرا اجرا
1137
00:36:51,440 –> 00:36:52,560
1138
00:36:52,560 –> 00:36:53,839
خواهد شد. روزی که این کد هم
1139
00:36:53,839 –> 00:36:56,000
اکنون باید اجرا شود، بنابراین این فرآیند والد در
1140
00:36:56,000 –> 00:36:56,560
حال ایجاد
1141
00:36:56,560 –> 00:36:59,359
فرآیند فرزند p1 و فرآیند فرزند p2 است
1142
00:36:59,359 –> 00:37:01,520
که اکنون به آنها فرآیندهای فرزند
1143
00:37:01,520 –> 00:37:04,560
می گویند که اکنون می گویید p1.join و p2.join
1144
00:37:04,560 –> 00:37:07,200
اکنون فرآیند والد منتظر می ماند تا p1
1145
00:37:07,200 –> 00:37:08,000
1146
00:37:08,000 –> 00:37:11,359
تمام موارد را تکمیل کند. آی تی اجرای کد s و
1147
00:37:11,359 –> 00:37:13,920
p1.join اساساً به این معنی است که منتظر بمانید تا p1
1148
00:37:13,920 –> 00:37:15,440
اجرای خود را کامل کند.
1149
00:37:15,440 –> 00:37:17,839
p2.join به این معنی است که منتظر بمانید تا p2 نیز
1150
00:37:17,839 –> 00:37:18,480
تکمیل شود
1151
00:37:18,480 –> 00:37:20,480
و سپس شروع به اجرای کل این کد کنید
1152
00:37:20,480 –> 00:37:22,400
که دقیقاً به این معنی است،
1153
00:37:22,400 –> 00:37:24,720
بنابراین یک چیز بسیار مهم دیگر
1154
00:37:24,720 –> 00:37:26,400
در چند پردازش با توجه به
1155
00:37:26,400 –> 00:37:28,400
پایتون بنابراین یک چیز بسیار مهم است،
1156
00:37:28,400 –> 00:37:31,200
بنابراین تصور کنید که ما در اینجا یک فرآیند والد داریم،
1157
00:37:31,200 –> 00:37:31,839
1158
00:37:31,839 –> 00:37:33,680
بنابراین فرآیند والد مشخصاً مقداری کد دارد
1159
00:37:33,680 –> 00:37:36,400
و مقداری حافظه دارد،
1160
00:37:36,400 –> 00:37:39,280
بنابراین فرآیند والد این d را در
1161
00:37:39,280 –> 00:37:40,880
حافظه دارد به یاد داشته
1162
00:37:40,880 –> 00:37:42,000
باشید که در فرآیند والد فرآیند والد چه چیزی وجود دارد.
1163
00:37:42,000 –> 00:37:44,560
کل
1164
00:37:44,560 –> 00:37:45,200
1165
00:37:45,200 –> 00:37:47,200
مجموعه داده d یا 100 میلیون
1166
00:37:47,200 –> 00:37:49,520
مشاهدات را در d دارد،
1167
00:37:49,520 –> 00:37:52,160
بنابراین وقتی والد
1168
00:37:52,160 –> 00:37:54,160
این دو فرآیند یا پردازش های فرزند
1169
00:37:54,160 –> 00:37:55,520
p1 p2
1170
00:37:55,520 –> 00:37:58,720
را ایجاد می کند یا ایجاد می کند، کاری که انجام می دهد این است
1171
00:37:58,720 –> 00:38:00,000
که متغیرهای موجود در والد
1172
00:38:00,000 –> 00:38:02,320
را کپی می کند، آنها را در فرزند کپی می کند. پردازش می کند،
1173
00:38:02,320 –> 00:38:03,200
بنابراین
1174
00:38:03,200 –> 00:38:05,920
d را در این فرآیند کپی می کند، همچنین آن را
1175
00:38:05,920 –> 00:38:07,440
در این فرآیند فرزند کپی می کند،
1176
00:38:07,440 –> 00:38:11,200
بنابراین هر پردازش فرزند حافظه خاص خود را دارد،
1177
00:38:11,200 –> 00:38:13,119
درست این فرآیند فرزند در حال اجرای
1178
00:38:13,119 –> 00:38:15,119
آن تابع t است. فرآیند فرزند او نیز
1179
00:38:15,119 –> 00:38:16,240
این تابع را اجرا
1180
00:38:16,240 –> 00:38:18,160
می کند، هر دو
1181
00:38:18,160 –> 00:38:20,720
حافظه متفاوتی دارند، هر دو حافظه مجزایی دارند،
1182
00:38:20,720 –> 00:38:23,119
بنابراین آنچه در p1 p2 اجرا
1183
00:38:23,119 –> 00:38:23,760
می شود
1184
00:38:23,760 –> 00:38:25,680
، تنها راه ارتباطی که آنها می توانند
1185
00:38:25,680 –> 00:38:27,359
از طریق این q برقرار کنند نمی دانند
1186
00:38:27,359 –> 00:38:30,079
زیرا این q زیرا p 1 می تواند نوشتن به
1187
00:38:30,079 –> 00:38:30,880
این q
1188
00:38:30,880 –> 00:38:32,720
p p2 همچنین می تواند در این صف بنویسد و
1189
00:38:32,720 –> 00:38:35,040
آنها می توانند از صف ها نیز به
1190
00:38:35,040 –> 00:38:36,480
درستی بخوانند زیرا آنها
1191
00:38:36,480 –> 00:38:38,800
تابعی را اجرا می کنند که به صف ها دسترسی
1192
00:38:38,800 –> 00:38:40,880
دارد، بسیار مهم است، به همین دلیل
1193
00:38:40,880 –> 00:38:42,800
یکی از جنبه های بسیار مهم در اینجا این است که اجازه دهید من به
1194
00:38:42,800 –> 00:38:44,000
شما نشان دهم کد
1195
00:38:44,000 –> 00:38:45,760
اگر متوجه این کد شدید اگر متوجه
1196
00:38:45,760 –> 00:38:47,520
این کد در این کد شدید
1197
00:38:47,520 –> 00:38:49,760
ما نگفتیم ببینید ما از di در
1198
00:38:49,760 –> 00:38:50,960
این کد استفاده می کنیم
1199
00:38:50,960 –> 00:38:52,640
هر دو این فرآیندها این
1200
00:38:52,640 –> 00:38:54,240
تابع را درست اجرا می کنند هر دو این فرآیند
1201
00:38:54,240 –> 00:38:55,520
این تابع را اجرا می کند
1202
00:38:55,520 –> 00:38:58,320
آنها به راحتی به di دسترسی پیدا
1203
00:38:58,320 –> 00:38:59,520
می کنند. دسترسی به di
1204
00:38:59,520 –> 00:39:01,760
چگونه میتوانند به di دسترسی پیدا کنند، آنها
1205
00:39:01,760 –> 00:39:03,280
میتوانند به di دسترسی داشته باشند، زیرا وقتی
1206
00:39:03,280 –> 00:39:05,760
والد این دو پردازش فرزند
1207
00:39:05,760 –> 00:39:09,119
را ایجاد کرد، یک کپی از d در
1208
00:39:09,119 –> 00:39:10,960
این پردازش فرزند ایجاد کرد، یک کپی از
1209
00:39:10,960 –> 00:39:12,720
d به t ایجاد کرد. پردازش فرزند او از آنجایی که این داده ها
1210
00:39:12,720 –> 00:39:14,320
تغییر
1211
00:39:14,320 –> 00:39:17,359
نمی کند، اکنون p 1 فقط از
1212
00:39:17,359 –> 00:39:20,960
شاخص 0 به n 1 در d پردازش می کند و
1213
00:39:20,960 –> 00:39:22,240
از n 1 به علاوه 1
1214
00:39:22,240 –> 00:39:25,520
تا n منهای 1 درست پردازش می کند،
1215
00:39:25,520 –> 00:39:28,160
بنابراین دوباره تعداد زیادی داخلی
1216
00:39:28,160 –> 00:39:29,440
سیستم عامل وجود دارد
1217
00:39:29,440 –> 00:39:31,200
مفاهیمی که در داخل اتفاق میافتند، من فقط
1218
00:39:31,200 –> 00:39:32,880
سعی میکنم آن را سادهسازی کنم تا حتی
1219
00:39:32,880 –> 00:39:34,720
افراد غیر cs بتوانند به راحتی بفهمند که
1220
00:39:34,720 –> 00:39:36,720
چند پردازشی و چند رشتهای چگونه کار میکند،
1221
00:39:36,720 –> 00:39:39,920
بنابراین یکی دیگر از مواردی که
1222
00:39:39,920 –> 00:39:41,599
در اینجا مهم است این است
1223
00:39:41,599 –> 00:39:44,079
که چه زمانی والدین به این موضوع نگاه میکنند.
1224
00:39:44,079 –> 00:39:46,400
این فرآیند بسیار
1225
00:39:46,400 –> 00:39:48,480
خوب است، شما درست چند هسته دارید، بنابراین
1226
00:39:48,480 –> 00:39:50,000
بیایید دوره را در اینجا ترسیم
1227
00:39:50,000 –> 00:39:52,560
کنیم، بنابراین ما هسته یک را داریم، هسته
1228
00:39:52,560 –> 00:39:53,119
دو
1229
00:39:53,119 –> 00:39:54,720
را داریم و به همین ترتیب ما شش کد روی این
1230
00:39:54,720 –> 00:39:56,480
رایانه داریم، حداقل بسته به
1231
00:39:56,480 –> 00:39:57,760
رایانه شما، تعداد هسته های متفاوتی خواهید داشت.
1232
00:39:57,760 –> 00:39:58,720
1233
00:39:58,720 –> 00:40:00,400
بنابراین والد می تواند در حال اجرا باشد،
1234
00:40:00,400 –> 00:40:01,680
فرض کنید والدین، فرض کنید شما
1235
00:40:01,680 –> 00:40:04,000
والدین در حال اجرا بر روی هسته 6 هستید
1236
00:40:04,000 –> 00:40:06,560
، لحظه ای که شما یک فرآیند جدید ایجاد می کنید،
1237
00:40:06,560 –> 00:40:08,319
لحظه ای که یک فرآیند جدید ایجاد می کنید
1238
00:40:08,319 –> 00:40:10,400
، سیستم عامل این
1239
00:40:10,400 –> 00:40:12,720
فرآیند را انجام می دهد و سعی میکند آن را در یکی
1240
00:40:12,720 –> 00:40:14,560
از دورهها اجرا
1241
00:40:14,560 –> 00:40:16,720
کند، درست است و وقتی که نگاه عملیاتی به
1242
00:40:16,720 –> 00:40:18,319
این موضوع توسط سیستمعامل تسهیل میشود،
1243
00:40:18,319 –> 00:40:19,520
1244
00:40:19,520 –> 00:40:21,119
بنابراین سیستمعامل
1245
00:40:21,119 –> 00:40:22,880
محتویات حافظه و کدهایی را که به
1246
00:40:22,880 –> 00:40:24,240
آن نیاز دارد،
1247
00:40:24,240 –> 00:40:25,760
همه چیزهایی را که
1248
00:40:25,760 –> 00:40:27,839
وجود دارد کپی میکند. کپی میکند و برنامهریزی میکند،
1249
00:40:27,839 –> 00:40:29,359
بنابراین به این
1250
00:40:29,359 –> 00:40:31,599
الگوریتمهای زمانبندی فرآیند گفته میشود،
1251
00:40:31,599 –> 00:40:33,359
بنابراین یک منطقه کامل به نام زمانبندی فرآیند وجود
1252
00:40:33,359 –> 00:40:34,560
1253
00:40:34,560 –> 00:40:36,000
دارد که موضوع بسیار بزرگی در
1254
00:40:36,000 –> 00:40:38,079
سیستمهای عامل است، بنابراین
1255
00:40:38,079 –> 00:40:39,920
زمانبندی فرآیندی که هزاران الگوریتم پشت
1256
00:40:39,920 –> 00:40:40,960
آن انجام میشود چه میکند.
1257
00:40:40,960 –> 00:40:43,359
این فرآیند آن را در یکی از دورهها زمانبندی میکند، به
1258
00:40:43,359 –> 00:40:44,560
1259
00:40:44,560 –> 00:40:46,319
طور مشابه سیستم عامل
1260
00:40:46,319 –> 00:40:47,599
این فرآیند را طی میکند
1261
00:40:47,599 –> 00:40:49,359
یا به طور کلی این فرآیند را
1262
00:40:49,359 –> 00:40:51,359
ایجاد میکند، حافظه را ایجاد میکند و کد را کپی میکند
1263
00:40:51,359 –> 00:40:54,560
و این را روی یک هسته دیگر زمانبندی میکند،
1264
00:40:54,560 –> 00:40:56,480
بنابراین چون سیستم عامل به یاد داشته باشد
1265
00:40:56,480 –> 00:40:58,000
که سیستم عامل باید تمام
1266
00:40:58,000 –> 00:40:58,880
این کار را انجام دهید
1267
00:40:58,880 –> 00:41:00,960
، یک سربار مرتبط با آن
1268
00:41:00,960 –> 00:41:02,240
1269
00:41:02,240 –> 00:41:04,319
وجود دارد، چه سربار است، زمان بیشتری صرف می شود که
1270
00:41:04,319 –> 00:41:05,520
1271
00:41:05,520 –> 00:41:07,839
به این قسمت نگاه کنید. هی میگوید من میخواهم
1272
00:41:07,839 –> 00:41:09,040
این فرآیند
1273
00:41:09,040 –> 00:41:10,319
را ایجاد کنم چگونه این فرآیند را ایجاد میکند،
1274
00:41:10,319 –> 00:41:11,680
سیستمعامل باید از همه اینها مراقبت کند،
1275
00:41:11,680 –> 00:41:12,079
این
1276
00:41:12,079 –> 00:41:13,440
سیستمعامل باید این مقادیر را کپی کند
1277
00:41:13,440 –> 00:41:15,599
و همه چیز را
1278
00:41:15,599 –> 00:41:16,000
1279
00:41:16,000 –> 00:41:18,560
روی یک هسته برنامهریزی کند، سیستمعامل نیز
1280
00:41:18,560 –> 00:41:20,000
سربار اضافی دارد زیرا باید
1281
00:41:20,000 –> 00:41:21,680
این را هم اکنون پردازش کند،
1282
00:41:21,680 –> 00:41:23,760
در حالی که p1 و p2 در این دوره در حال اجرا هستند،
1283
00:41:23,760 –> 00:41:26,160
فرآیند والد شما
1284
00:41:26,160 –> 00:41:28,319
خواب است، میگوید هی، من چیزی برای اجرا ندارم،
1285
00:41:28,319 –> 00:41:29,280
1286
00:41:29,280 –> 00:41:31,119
بگذارید هر دوی آنها کامل شوند
1287
00:41:31,119 –> 00:41:33,680
، پس از اتمام هر دو، من را بیدار کنید
1288
00:41:33,680 –> 00:41:35,760
تا حتی توسط سیستم عامل انجام می شود،
1289
00:41:35,760 –> 00:41:37,440
بنابراین تمام این
1290
00:41:37,440 –> 00:41:40,079
هماهنگی پیچیده که کدام فرآیند
1291
00:41:40,079 –> 00:41:41,680
باید به کدام هسته برود، چه اتفاقی می افتد
1292
00:41:41,680 –> 00:41:43,200
پس از تکمیل فرآیند
1293
00:41:43,200 –> 00:41:45,440
چگونه این فرآیند جدید ایجاد شود، همه
1294
00:41:45,440 –> 00:41:48,000
اینها توسط سیستم عامل شما
1295
00:41:48,000 –> 00:41:49,359
درست انجام می شود، بنابراین مهم ترین
1296
00:41:49,359 –> 00:41:51,359
جنبه در اینجاست. سربار
1297
00:41:51,359 –> 00:41:53,040
زیادی است، زمانی که
1298
00:41:53,040 –> 00:41:55,280
سیستم عامل برای انجام برخی از این وظایف صرف می
1299
00:41:55,280 –> 00:41:57,280
کند بسیار خوب است، بنابراین اکنون بسیار خوب است، بنابراین ما همه این کارها را به خوبی انجام داده ایم،
1300
00:41:57,280 –> 00:41:58,880
1301
00:41:58,880 –> 00:42:00,800
بنابراین بیایید زمان اجرای درست را ببینیم
1302
00:42:00,800 –> 00:42:02,319
1303
00:42:02,319 –> 00:42:03,680
اگر اضافه نمیکنید، اگر به کارها سرعت نمیدهید، این منطقی
1304
00:42:03,680 –> 00:42:04,400
1305
00:42:04,400 –> 00:42:06,480
نیست، بنابراین آنچه در اینجا اتفاق میافتد فرآیند
1306
00:42:06,480 –> 00:42:08,160
یک فرآیند
1307
00:42:08,160 –> 00:42:09,839
انجام میشود، پس از
1308
00:42:09,839 –> 00:42:11,760
تکمیل این فرآیند شروع به
1309
00:42:11,760 –> 00:42:13,200
اجرا میکنند.
1310
00:42:13,200 –> 00:42:14,000
1311
00:42:14,000 –> 00:42:15,280
آیا ما در اینجا انجام می دهیم، می گوییم
1312
00:42:15,280 –> 00:42:18,160
m برابر با 0 مقداردهی اولیه یک متغیر است
1313
00:42:18,160 –> 00:42:21,280
در حالی که q خالی نیست، به یاد داشته باشید که این دو
1314
00:42:21,280 –> 00:42:23,839
فرآیند فرآیند 1 و فرآیند 2
1315
00:42:23,839 –> 00:42:26,800
چیزی را در این صف قرار داده اند،
1316
00:42:26,800 –> 00:42:28,240
بنابراین اکنون چه می گوییم
1317
00:42:28,240 –> 00:42:29,680
ببینید آنها چیزهایی را در صف قرار داده
1318
00:42:29,680 –> 00:42:31,119
اند. حالا چیزها را در صف قرار دهید.
1319
00:42:31,119 –> 00:42:31,680
1320
00:42:31,680 –> 00:42:33,839
1321
00:42:33,839 –> 00:42:35,760
1322
00:42:35,760 –> 00:42:37,359
1323
00:42:37,359 –> 00:42:39,280
1324
00:42:39,280 –> 00:42:41,440
1325
00:42:41,440 –> 00:42:42,880
بنابراین، در حالی که
1326
00:42:42,880 –> 00:42:45,359
q خالی نیست، هر یک از این
1327
00:42:45,359 –> 00:42:46,000
مقادیر را دریافت کنید،
1328
00:42:46,000 –> 00:42:48,400
بنابراین m1 اینجا نوشته می شود، بیشتر m2 در
1329
00:42:48,400 –> 00:42:49,119
اینجا نوشته می شود
1330
00:42:49,119 –> 00:42:51,040
، ترتیب بستگی به این دارد که
1331
00:42:51,040 –> 00:42:53,280
کدام فرآیند سریعتر اجرا شود،
1332
00:42:53,280 –> 00:42:55,280
درست است که ما نمی توانیم کنترل کنیم که بستگی
1333
00:42:55,280 –> 00:42:56,720
به lo دارد. در مورد اینکه سیستم عامل چگونه
1334
00:42:56,720 –> 00:42:58,400
این چیزها را تنظیم می کند
1335
00:42:58,400 –> 00:42:59,440
حداقل در کدی که ما
1336
00:42:59,440 –> 00:43:01,280
نوشته ایم راه های دیگری برای کنترل اینکه
1337
00:43:01,280 –> 00:43:02,880
کدام فرآیند باید اولویت داشته باشد وجود دارد و
1338
00:43:02,880 –> 00:43:03,920
همه چیز
1339
00:43:03,920 –> 00:43:05,680
خوب است، بنابراین اکنون ما چه می کنیم،
1340
00:43:05,680 –> 00:43:07,839
فقط m1 و m2 را خلاصه می کنیم. اکنون
1341
00:43:07,839 –> 00:43:12,240
m حاوی m1 به علاوه m2 m1 به اضافه m2 است، پس
1342
00:43:12,240 –> 00:43:13,599
میگوییم بیایید
1343
00:43:13,599 –> 00:43:14,880
میانگین آن را
1344
00:43:14,880 –> 00:43:17,680
درست در نظر بگیریم که دقیقاً در
1345
00:43:17,680 –> 00:43:18,160
یادداشتها
1346
00:43:18,160 –> 00:43:20,319
دیدیم که دیدیم منطق بسیار
1347
00:43:20,319 –> 00:43:23,119
ساده است، بنابراین منطق،
1348
00:43:23,119 –> 00:43:24,640
منطق بسیار ساده است. هنگامی
1349
00:43:24,640 –> 00:43:26,640
که منطق را دریافت کردید، می توانید به راحتی آن
1350
00:43:26,640 –> 00:43:27,119
منطق
1351
00:43:27,119 –> 00:43:28,640
را به کد ترجمه کنید، اما باید بسیار
1352
00:43:28,640 –> 00:43:30,960
مراقب باشید که اشتباهات احمقانه ای مرتکب نشوید،
1353
00:43:30,960 –> 00:43:33,280
اگر دوباره این کد را تکرار کنید،
1354
00:43:33,280 –> 00:43:34,800
نوشتن کد چند هسته ای
1355
00:43:34,800 –> 00:43:37,280
یا چند رشته ای غیر ضروری است،
1356
00:43:37,280 –> 00:43:38,960
بسیاری از آنها وجود دارد. راه هایی که ممکن است همه چیز
1357
00:43:38,960 –> 00:43:40,079
اشتباه پیش برود
1358
00:43:40,079 –> 00:43:42,000
و در نهایت شما زمان پایان را چاپ کردید اکنون
1359
00:43:42,000 –> 00:43:43,040
به این نگاه کنید این جالب ترین
1360
00:43:43,040 –> 00:43:43,839
قسمت است که
1361
00:43:43,839 –> 00:43:47,440
20.90 ثانیه طول کشید،
1362
00:43:47,440 –> 00:43:49,520
خوب چقدر زمان طول کشید این کار
1363
00:43:49,520 –> 00:43:52,720
11.01 ثانیه طول کشید.
1364
00:43:52,720 –> 00:43:55,200
اجازه دهید من آن اعداد را با یک
1365
00:43:55,200 –> 00:43:55,920
فرآیند
1366
00:43:55,920 –> 00:43:58,720
با یک پروک بنویسم اگر روی یک هسته اجرا
1367
00:43:58,720 –> 00:44:00,880
شود 20.9 ثانیه طول کشید
1368
00:44:00,880 –> 00:44:04,160
و دو فرآیند به طور موازی اجرا میشد،
1369
00:44:04,160 –> 00:44:07,440
1370
00:44:07,440 –> 00:44:09,520
1371
00:44:09,520 –> 00:44:10,560
1372
00:44:10,560 –> 00:44:12,319
اگر دوباره آن را به دو نیمه تقسیم کنید، اگر این مقدار را تقریبی کنید
1373
00:44:12,319 –> 00:44:14,319
باید 10.45 ثانیه باشد، در
1374
00:44:14,319 –> 00:44:17,520
حالت ایدهآل ببینید که اگر
1375
00:44:17,520 –> 00:44:18,880
هر دو فرآیند به خوبی اجرا میشدند، سربار وجود نداشت.
1376
00:44:18,880 –> 00:44:20,240
1377
00:44:20,240 –> 00:44:22,480
اگر به دلیل اینکه دقیقاً به
1378
00:44:22,480 –> 00:44:23,280
دو نیمه تقسیم
1379
00:44:23,280 –> 00:44:25,520
کردیم، میتوانستیم نتیجه را در 10.45 ثانیه به دست آوریم،
1380
00:44:25,520 –> 00:44:26,880
1381
00:44:26,880 –> 00:44:28,880
اما یک سیستم عامل
1382
00:44:28,880 –> 00:44:30,400
سربار وجود دارد، به همین دلیل است که دقیقاً
1383
00:44:30,400 –> 00:44:31,599
10.45
1384
00:44:31,599 –> 00:44:33,119
ثانیه نیست، کمی بیشتر از آن است
1385
00:44:33,119 –> 00:44:34,640
زیرا سیستم عامل باید
1386
00:44:34,640 –> 00:44:36,240
هر دو فرآیند را بهمحض
1387
00:44:36,240 –> 00:44:38,720
انجام فرآیند زمانبندی کند. پس از
1388
00:44:38,720 –> 00:44:39,920
اتمام هر دو فرآیند، باید
1389
00:44:39,920 –> 00:44:41,440
آن را به فرآیند والد برگرداند،
1390
00:44:41,440 –> 00:44:44,400
همه چیزهایی که حدود نیم ثانیه طول کشیده است،
1391
00:44:44,400 –> 00:44:45,040
1392
00:44:45,040 –> 00:44:47,680
تقریباً تقریباً نیم ثانیه
1393
00:44:47,680 –> 00:44:48,480
درست است، بنابراین
1394
00:44:48,480 –> 00:44:50,240
این سرعت کلی است، بنابراین شما
1395
00:44:50,240 –> 00:44:51,760
با استفاده از آن سرعت بسیار خوبی دریافت خواهید کرد.
1396
00:44:51,760 –> 00:44:54,240
با دو هسته شما تقریبا زمان را
1397
00:44:54,240 –> 00:44:56,160
تقریباً نه دقیقاً کاهش می دهید، اما تقریباً آن را به نصف کاهش می دهید
1398
00:44:56,160 –> 00:44:56,960
1399
00:44:56,960 –> 00:44:59,760
که فوق العاده است، درست است، بنابراین شما اینگونه
1400
00:44:59,760 –> 00:45:01,520
هستید می توانید دوباره کد چند رشته ای بنویسید
1401
00:45:01,520 –> 00:45:03,440
کاری که ما در اینجا انجام می دهیم این است که این
1402
00:45:03,440 –> 00:45:05,280
فقط یک جلسه مقدماتی است،
1403
00:45:05,280 –> 00:45:07,599
بنابراین این چند هسته ای است یا هر
1404
00:45:07,599 –> 00:45:09,520
چیزی که با چندین پردازش اجرا می کنید
1405
00:45:09,520 –> 00:45:12,000
، کد چند هسته ای یا چند هسته ای نامیده می شود،
1406
00:45:12,000 –> 00:45:13,040
1407
00:45:13,040 –> 00:45:15,119
خوب این دوباره اگر می خواهید
1408
00:45:15,119 –> 00:45:16,400
بنویسید
1409
00:45:16,400 –> 00:45:19,119
کد چند فرآیندی در اینجا بسیار خوب است
1410
00:45:19,119 –> 00:45:20,880
، روشهای بسیار زیادی برای نوشتن آن وجود
1411
00:45:20,880 –> 00:45:22,560
دارد، کتابخانههای بسیار زیادی وجود دارد،
1412
00:45:22,560 –> 00:45:24,720
چیزی که من در اینجا به شما نشان دادم، ابتداییترین
1413
00:45:24,720 –> 00:45:25,599
1414
00:45:25,599 –> 00:45:29,440
کتابخانه داخلی است که در پایتون وجود دارد، بسیار
1415
00:45:29,440 –> 00:45:31,040
خوب، حالا همه چیز جالب است.
1416
00:45:31,040 –> 00:45:32,800
این اصطلاح
1417
00:45:32,800 –> 00:45:34,160
threading درست است، پس
1418
00:45:34,160 –> 00:45:35,520
این چه چیزی است که به آن
1419
00:45:35,520 –> 00:45:37,440
چند رشته می
1420
00:45:37,440 –> 00:45:39,920
گویند، خوب اجازه دهید توضیح بدهم
1421
00:45:39,920 –> 00:45:41,520
1422
00:45:41,520 –> 00:45:44,160
1423
00:45:44,160 –> 00:45:46,160
1424
00:45:46,160 –> 00:45:47,680
1425
00:45:47,680 –> 00:45:49,359
که threading چیست. در مورد threading با
1426
00:45:49,359 –> 00:45:51,040
جزئیات بسیار بیشتر زیرا
1427
00:45:51,040 –> 00:45:52,000
1428
00:45:52,000 –> 00:45:54,640
در c plus plus و java در پایتون
1429
00:45:54,640 –> 00:45:56,160
بسیار مشکل تر است اما من به شما می گویم که
1430
00:45:56,160 –> 00:46:00,160
چرا در پایتون نیز مشکل است بنابراین اینتل
1431
00:46:00,160 –> 00:46:02,480
گفت: باشه تصور کنید من یک هسته دارم
1432
00:46:02,480 –> 00:46:04,800
ایده این است تصور کنید ما یک هسته داریم یکی
1433
00:46:04,800 –> 00:46:07,839
خوب گفت چرا باید
1434
00:46:07,839 –> 00:46:10,400
دوباره چیز دیگری به نام پردازش های
1435
00:46:10,400 –> 00:46:11,520
محدود به cpu وجود دارد که
1436
00:46:11,520 –> 00:46:14,400
من فقط یک فرآیند i o
1437
00:46:14,400 –> 00:46:16,400
باند را به شما می دهم اجازه دهید فقط برخی اصطلاحات را توضیح دهم
1438
00:46:16,400 –> 00:46:17,760
1439
00:46:17,760 –> 00:46:19,359
زیرا این مهم است برای درک
1440
00:46:19,359 –> 00:46:21,520
این مفهوم با جزئیات بسیار بیشتر،
1441
00:46:21,520 –> 00:46:24,720
بنابراین Cpu Bound چیست، بنابراین فرض کنید
1442
00:46:24,720 –> 00:46:26,960
شما یک کار محدود به cpu
1443
00:46:26,960 –> 00:46:29,920
و یک کار i o bound دارید، بنابراین معنی
1444
00:46:29,920 –> 00:46:31,839
آن مشکلی ندارد، بنابراین بیایید فرض کنیم این یک هسته است
1445
00:46:31,839 –> 00:46:33,359
که ما داریم، فرض کنیم این یک هسته است.
1446
00:46:33,359 –> 00:46:34,160
1447
00:46:34,160 –> 00:46:35,839
خوب این این است این به شما کمک می
1448
00:46:35,839 –> 00:46:38,480
کند تصور کنید روی این هسته ما
1449
00:46:38,480 –> 00:46:39,599
در حال اجرا هستیم
1450
00:46:39,599 –> 00:46:42,640
تعدادی کد را اجرا می کنیم خوب این کد دوباره
1451
00:46:42,640 –> 00:46:45,200
هسته چیست یک هسته اساساً یک cpu است
1452
00:46:45,200 –> 00:46:46,880
بخشی از cpu بسیار
1453
00:46:46,880 –> 00:46:48,640
خوب این اساساً بخشی از cpu است
1454
00:46:48,640 –> 00:46:50,480
رم شما بیرون است که
1455
00:46:50,480 –> 00:46:53,280
دیسک شما بیرون است که سایر
1456
00:46:53,280 –> 00:46:54,079
دستگاه های io
1457
00:46:54,079 –> 00:46:56,000
شما مانند دوربین ماوس کیبورد شما همه
1458
00:46:56,000 –> 00:46:57,280
آنها بیرون هستند،
1459
00:46:57,280 –> 00:47:00,560
درست یک هسته بخشی از cpu است بنابراین
1460
00:47:00,560 –> 00:47:01,040
1461
00:47:01,040 –> 00:47:03,520
می توان کدهایی را به cpu محدود کرد اکنون آنچه که cpu bound
1462
00:47:03,520 –> 00:47:05,520
cpu bound اساساً من است.
1463
00:47:05,520 –> 00:47:08,880
هر کدی که دارید به زمان زیادی نیاز دارد
1464
00:47:08,880 –> 00:47:12,000
، فرض کنید کدی دارید که محاسبات عددی
1465
00:47:12,000 –> 00:47:12,800
خالص را انجام
1466
00:47:12,800 –> 00:47:15,520
می دهد، کدی دارید که
1467
00:47:15,520 –> 00:47:17,680
محاسبات عددی خالص را انجام می دهد.
1468
00:47:17,680 –> 00:47:19,599
1469
00:47:19,599 –> 00:47:21,119
1470
00:47:21,119 –> 00:47:23,839
1471
00:47:23,839 –> 00:47:26,640
jobs همچنین که
1472
00:47:26,640 –> 00:47:28,559
تصور کنید دیسک شما نیز یک
1473
00:47:28,559 –> 00:47:30,079
دستگاه خروجی ورودی است. io اساساً به معنای
1474
00:47:30,079 –> 00:47:33,359
خروجی ورودی است خوب فرض کنید تصور کنید اجرا شود.
1475
00:47:33,359 –> 00:47:34,160
1476
00:47:34,160 –> 00:47:35,440
1477
00:47:35,440 –> 00:47:37,440
1478
00:47:37,440 –> 00:47:38,400
1479
00:47:38,400 –> 00:47:41,839
رم را
1480
00:47:41,839 –> 00:47:43,920
به پردازنده یا این هسته و
1481
00:47:43,920 –> 00:47:45,440
سپس اجرا کنید
1482
00:47:45,440 –> 00:47:47,520
تا من داده ها را از دیسکی
1483
00:47:47,520 –> 00:47:48,960
که یک دستگاه io
1484
00:47:48,960 –> 00:47:52,079
به رم است دریافت کنم و داده ها را از رم دریافت کنم
1485
00:47:52,079 –> 00:47:54,640
تا در واقع اجرای کد من شروع به اجرای کد من
1486
00:47:54,640 –> 00:47:55,520
1487
00:47:55,520 –> 00:47:58,240
شود، ممکن است کمی طول بکشد، بنابراین کارهایی
1488
00:47:58,240 –> 00:48:00,319
که صرف وقت بیشتر
1489
00:48:00,319 –> 00:48:02,960
با دستگاههای i o مانند دیسک،
1490
00:48:02,960 –> 00:48:05,680
فرآیندهای i o محدود نامیده میشوند،
1491
00:48:05,680 –> 00:48:08,160
بنابراین حتی کارهای عددی نیز
1492
00:48:08,160 –> 00:48:10,640
میتوانند در علم داده محدود شوند،
1493
00:48:10,640 –> 00:48:12,480
زیرا ممکن است مجبور به خواندن باشید. اگر
1494
00:48:12,480 –> 00:48:14,000
دادههای زیادی دارید، ممکن است
1495
00:48:14,000 –> 00:48:16,000
مجبور شوید دادههای زیادی را از دیسک بخوانید و
1496
00:48:16,000 –> 00:48:19,440
در نتیجه آنها را به cpu محدود میکنید
1497
00:48:19,440 –> 00:48:21,359
اساساً به این معنی است که در واقع
1498
00:48:21,359 –> 00:48:23,599
کارها را بر اساس آنچه
1499
00:48:23,599 –> 00:48:24,559
1500
00:48:24,559 –> 00:48:27,680
در رم و حافظه پنهان پردازنده در
1501
00:48:27,680 –> 00:48:29,200
دوره آموزشی ما به راحتی در دسترس است اجرا میکند. ویدئوها ما
1502
00:48:29,200 –> 00:48:30,960
معماری اولیه یک کامپیوتر را توضیح می دهیم cpu
1503
00:48:30,960 –> 00:48:32,160
چیست چه رم است چه
1504
00:48:32,160 –> 00:48:34,880
دوباره حافظه نهان اساساً دوباره
1505
00:48:34,880 –> 00:48:36,160
ثبت می شود همچنین
1506
00:48:36,160 –> 00:48:38,079
سطوح مختلفی از رم وجود دارد
1507
00:48:38,079 –> 00:48:39,599
چندین سطح حافظه
1508
00:48:39,599 –> 00:48:41,280
وجود دارد جایی در اینجا یک حافظه پنهان وجود دارد
1509
00:48:41,280 –> 00:48:43,280
که سریع است دوباره داده ها می روند از
1510
00:48:43,280 –> 00:48:45,440
رم گرفته تا کش تا
1511
00:48:45,440 –> 00:48:46,960
1512
00:48:46,960 –> 00:48:49,280
رجیسترها تا رجیسترها در کامپیوتر شما، بنابراین بدون
1513
00:48:49,280 –> 00:48:50,160
اینکه خیلی عمیق بمانید،
1514
00:48:50,160 –> 00:48:52,400
این همان چیزی است که i o bound فرآیند است
1515
00:48:52,400 –> 00:48:54,480
و Cpu bound به درستی پردازش میکند،
1516
00:48:54,480 –> 00:48:57,680
بنابراین تصور کنید که شما دو تا دارید،
1517
00:48:57,680 –> 00:48:59,280
بنابراین ایده کامل این است که
1518
00:48:59,280 –> 00:49:00,640
Intel به این مفهوم رسیده است. از
1519
00:49:00,640 –> 00:49:03,040
multithreading می گویند تصور کنید اگر
1520
00:49:03,040 –> 00:49:03,839
1521
00:49:03,839 –> 00:49:06,880
دو کار دارید که خوب اجرا می کنید، بیایید
1522
00:49:06,880 –> 00:49:08,559
این کار را
1523
00:49:08,559 –> 00:49:10,640
پس از اجرای چند دستورالعمل فرض کنیم که
1524
00:49:10,640 –> 00:49:12,240
می خواهد برخی داده ها را واکشی کند. رام
1525
00:49:12,240 –> 00:49:13,359
دیسک
1526
00:49:13,359 –> 00:49:15,359
خوب است در حالی که داده ها را
1527
00:49:15,359 –> 00:49:16,559
از دیسک دریافت می
1528
00:49:16,559 –> 00:49:19,440
کند خوب است چرا نمی توانم کد بیشتری را
1529
00:49:19,440 –> 00:49:20,240
روی همان
1530
00:49:20,240 –> 00:49:24,720
پردازنده به عنوان بخشی از همان فرآیند اجرا
1531
00:49:24,720 –> 00:49:26,240
کنم به این نگاه کنید من ممکن است یک
1532
00:49:26,240 –> 00:49:28,720
پردازش داشته باشم ایده اصلی اینجا این است
1533
00:49:28,720 –> 00:49:31,119
فرض کنید تصور کنید من یک فرآیند تک دارم، بسیار
1534
00:49:31,119 –> 00:49:31,839
خوب
1535
00:49:31,839 –> 00:49:35,359
، فرآیند واحد میتواند چندین
1536
00:49:35,359 –> 00:49:38,319
مسیر اجرایی داشته باشد، بنابراین مسیرهای اجرا
1537
00:49:38,319 –> 00:49:39,440
به این شکل ترسیم میشوند یا
1538
00:49:39,440 –> 00:49:41,040
گاهی اوقات
1539
00:49:41,040 –> 00:49:42,640
مانند یک مار ترسیم میشوند، این اساساً به این معنی است که این
1540
00:49:42,640 –> 00:49:44,720
خط به دنبال این خط، این خط
1541
00:49:44,720 –> 00:49:46,480
، ممکن است اتفاق بیفتد که اجازه بدهید
1542
00:49:46,480 –> 00:49:50,000
مثالی بزنم، فرض کنید شما یک سیستم دارید که در
1543
00:49:50,000 –> 00:49:52,000
آن اجرا میشوید، بنابراین این فرآیند به این صورت است
1544
00:49:52,000 –> 00:49:54,720
که فرض کنید در هسته اجرا میشود،
1545
00:49:54,720 –> 00:49:56,240
خوب است، مقداری حافظه مرتبط
1546
00:49:56,240 –> 00:49:59,119
با این فرآیند وجود دارد که تمام دادهها را ذخیره میکند،
1547
00:49:59,119 –> 00:50:01,760
حالا فرض کنید این فرآیند پس از اجرا، برخی از
1548
00:50:01,760 –> 00:50:02,880
1549
00:50:02,880 –> 00:50:04,800
عملیاتها را اجرا میکند. بیایید فرض کنیم در این
1550
00:50:04,800 –> 00:50:06,800
مرحله میخواهد برود و برخی از دادهها را از
1551
00:50:06,800 –> 00:50:08,160
دستگاه io مانند یک دیسک
1552
00:50:08,160 –> 00:50:10,480
واکشی
1553
00:50:10,480 –> 00:50:12,400
1554
00:50:12,400 –> 00:50:14,559
کند.
1555
00:50:14,559 –> 00:50:16,480
دنیایی که در آن تصور کنید اگر
1556
00:50:16,480 –> 00:50:19,200
امکان اجرای یک سری عملیات دیگر وجود دارد
1557
00:50:19,200 –> 00:50:21,200
زیرا io به زمان بیشتری نیاز دارد cpu یک
1558
00:50:21,200 –> 00:50:22,800
دستگاه فوق سریع است که با سرعت گیگاهرتز کار می کند،
1559
00:50:22,800 –> 00:50:24,559
1560
00:50:24,559 –> 00:50:27,440
درست است چرا ما زمان را به درستی تلف می کنیم،
1561
00:50:27,440 –> 00:50:27,760
بنابراین
1562
00:50:27,760 –> 00:50:30,640
تصور کنید اگر چند خط کد دیگر وجود دارد
1563
00:50:30,640 –> 00:50:31,280
1564
00:50:31,280 –> 00:50:33,520
که ما وجود دارد. می تواند اجرا شود و اگر این چند
1565
00:50:33,520 –> 00:50:35,359
خط کد دوباره این چند خط
1566
00:50:35,359 –> 00:50:36,960
کد به این حافظه نیاز
1567
00:50:36,960 –> 00:50:38,960
داشته باشد و روی امتیاز اجرا می شود، بنابراین
1568
00:50:38,960 –> 00:50:40,880
در حالی که این دنباله از
1569
00:50:40,880 –> 00:50:42,559
عملیات است، فرض کنیم در حال رفتن است و
1570
00:50:42,559 –> 00:50:44,079
داده ها را از دیسک واکشی می کند،
1571
00:50:44,079 –> 00:50:46,000
چه می شود اگر بتوانیم مقدار بیشتری را اجرا کنیم. دنباله
1572
00:50:46,000 –> 00:50:47,359
اجرا
1573
00:50:47,359 –> 00:50:50,079
چند خط دیگر کد و این
1574
00:50:50,079 –> 00:50:51,839
خطوط کد بخشی از همان
1575
00:50:51,839 –> 00:50:52,800
فرآیند
1576
00:50:52,800 –> 00:50:54,400
هستند، آنها بخشی از همان فرآیند هستند که
1577
00:50:54,400 –> 00:50:56,880
از مکان های حافظه مشابهی استفاده می کند،
1578
00:50:56,880 –> 00:50:59,760
پس چرا دوباره دو رشته نداشته باشیم به این دو رشته می
1579
00:50:59,760 –> 00:51:01,040
گویند
1580
00:51:01,040 –> 00:51:01,680
زیرا
1581
00:51:01,680 –> 00:51:04,000
در اکثر کتابهای درسی و در اکثر مفاهیم
1582
00:51:04,000 –> 00:51:05,920
حتی در مستندات اینتل،
1583
00:51:05,920 –> 00:51:08,480
اینها به صورت رشتههایی مانند این ترسیم شدهاند،
1584
00:51:08,480 –> 00:51:10,079
پس مجموعهای از اینتل،
1585
00:51:10,079 –> 00:51:11,920
چرا مفهوم مفهومی
1586
00:51:11,920 –> 00:51:13,119
به نام hyper threading
1587
00:51:13,119 –> 00:51:16,400
i را انجام ندهیم. در اوایل دهه 2000 با پردازندههای پنتیوم 4،
1588
00:51:16,400 –> 00:51:17,920
آنها گفتند که رایانههای بیشتری
1589
00:51:17,920 –> 00:51:19,440
از نظر گرافیکی فشرده میشوند،
1590
00:51:19,440 –> 00:51:21,440
پس چرا ما دو رشته در هر
1591
00:51:21,440 –> 00:51:24,160
هسته نداریم تا حتی اگر یک
1592
00:51:24,160 –> 00:51:27,200
رشته از پردازندههای مرکزی استفاده نمیکند، رشتههای دیگر در
1593
00:51:27,200 –> 00:51:28,880
همان فرآیند
1594
00:51:28,880 –> 00:51:33,200
میتوانند از cpu یا یک بار می توانید از هسته استفاده کنید
1595
00:51:33,200 –> 00:51:36,400
خوب به یاد داشته باشید که شما در
1596
00:51:36,400 –> 00:51:39,680
هر زمان یک پردازش برای هر هسته دارید، بنابراین برای
1597
00:51:39,680 –> 00:51:41,440
مثال شما شش هسته
1598
00:51:41,440 –> 00:51:43,920
در هر زمان و در هر
1599
00:51:43,920 –> 00:51:46,319
زمانی دارید فقط یک پردازش می تواند در اینجا اجرا شود،
1600
00:51:46,319 –> 00:51:47,760
خوب فرض کنید فرآیند شما در
1601
00:51:47,760 –> 00:51:49,920
حال اجرا است. فرآیند یک
1602
00:51:49,920 –> 00:51:53,280
به سمت راست به چندین رشته تقسیم می شود
1603
00:51:53,280 –> 00:51:56,640
و در هر نقطه از زمان که یک
1604
00:51:56,640 –> 00:51:58,559
رشته در انتظار i است، رشته دیگر
1605
00:51:58,559 –> 00:52:00,240
می تواند در کدی که به
1606
00:52:00,240 –> 00:52:01,920
آن اختصاص داده شده است اجرا کند، فرض کنید این هسته
1607
00:52:01,920 –> 00:52:03,359
یک
1608
00:52:03,359 –> 00:52:05,040
راست است، بنابراین کل مفهوم
1609
00:52:05,040 –> 00:52:07,359
چند threading دوباره بسیار محبوب است
1610
00:52:07,359 –> 00:52:08,960
اگر شما کد نوشته اید اگر
1611
00:52:08,960 –> 00:52:10,559
c به علاوه جاوا را
1612
00:52:10,559 –> 00:52:12,079
1613
00:52:12,079 –> 00:52:14,000
یاد گرفته باشید، این به طور گسترده در آن زبان های برنامه نویسی استفاده می شود، اما یک
1614
00:52:14,000 –> 00:52:15,839
نمودار بسیار مهم را به خاطر بسپارید که وقتی
1615
00:52:15,839 –> 00:52:16,240
می
1616
00:52:16,240 –> 00:52:17,119
بینید. جستجوی
1617
00:52:17,119 –> 00:52:18,480
چند رشته ای در گوگل این است که اجازه دهید
1618
00:52:18,480 –> 00:52:19,920
نمودار را توضیح دهم،
1619
00:52:19,920 –> 00:52:21,599
بنابراین اگر به کل این موضوع به عنوان یک
1620
00:52:21,599 –> 00:52:23,760
فرآیند فکر می
1621
00:52:23,760 –> 00:52:26,880
کنید، داده هایی که بین آنها موجود است، بنابراین
1622
00:52:26,880 –> 00:52:28,319
اینها چندین رشته هستند، من به شما درست نشان دادم
1623
00:52:28,319 –> 00:52:30,000
1624
00:52:30,000 –> 00:52:32,160
که این رشته زمانی که این رشته برای io می رود می تواند اجرا شود. این رشته
1625
00:52:32,160 –> 00:52:33,440
میتواند شروع به اجرا کند
1626
00:52:33,440 –> 00:52:35,119
و وقتی این رشته برای io میرود، این
1627
00:52:35,119 –> 00:52:37,200
رشته میتواند برگردد و شروع به اجرا کند،
1628
00:52:37,200 –> 00:52:40,319
اما رشتهها دادههای مشابهی را به اشتراک میگذارند که
1629
00:52:40,319 –> 00:52:43,200
در فرآیند قابل دسترسی است،
1630
00:52:43,200 –> 00:52:43,520
بنابراین
1631
00:52:43,520 –> 00:52:45,839
نخها اغلب
1632
00:52:45,839 –> 00:52:47,839
به عنوان فرآیندهای سبک وزن
1633
00:52:47,839 –> 00:52:49,520
نامیده میشوند، زیرا آنها هستند. همان کاری
1634
00:52:49,520 –> 00:52:51,200
را انجام میدهیم که فرآیندها انجام میدهند،
1635
00:52:51,200 –> 00:52:53,520
اما در حال حاضر تعویض متن با سرعت بسیار زیاد، به
1636
00:52:53,520 –> 00:52:55,119
1637
00:52:55,119 –> 00:52:57,119
این معناست که
1638
00:52:57,119 –> 00:52:58,240
تصور کنید
1639
00:52:58,240 –> 00:53:00,240
یک هسته دارید، فرض کنید این هستهای است
1640
00:53:00,240 –> 00:53:02,160
که در حال اجرای فرآیند است.
1641
00:53:02,160 –> 00:53:04,720
1642
00:53:04,720 –> 00:53:07,040
همین چند وقت پیش دیدم با عرض
1643
00:53:07,040 –> 00:53:08,160
پوزش،
1644
00:53:08,160 –> 00:53:10,480
من فقط به شما نشان خواهم داد که چرا تغییر متن
1645
00:53:10,480 –> 00:53:12,640
مهم است، پس بیایید به این نگاه کنیم،
1646
00:53:12,640 –> 00:53:14,400
بنابراین من به نحوه عملکرد سیستم اشاره کردم tem
1647
00:53:14,400 –> 00:53:15,920
در اینجا نقشی را بازی می کند،
1648
00:53:15,920 –> 00:53:17,920
تصور کنید اگر من فرآیندهای کاملاً متفاوتی ایجاد می کنم،
1649
00:53:17,920 –> 00:53:20,000
1650
00:53:20,000 –> 00:53:22,160
آنچه سیستم عامل باید انجام دهد این است
1651
00:53:22,160 –> 00:53:23,760
که سیستم عامل باید
1652
00:53:23,760 –> 00:53:25,920
محتویات این حافظه را
1653
00:53:25,920 –> 00:53:28,720
دقیقاً کدی را که دارد کپی کند و یک
1654
00:53:28,720 –> 00:53:30,000
فرآیند کاملاً جدید را شروع کند
1655
00:53:30,000 –> 00:53:33,280
و اختصاص دهد. به یک هسته جدید که کل
1656
00:53:33,280 –> 00:53:35,359
زمان به نام زمان تعویض متن نامیده می شود
1657
00:53:35,359 –> 00:53:37,440
، زمانی که از آن زمان این
1658
00:53:37,440 –> 00:53:38,640
فرآیند والد را متوقف
1659
00:53:38,640 –> 00:53:40,720
کردیم و یکی از این فرآیندها را شروع کردیم،
1660
00:53:40,720 –> 00:53:42,319
زمینه نامیده می شود زیرا ما در حال
1661
00:53:42,319 –> 00:53:43,920
تغییر زمینه از والد به یکی
1662
00:53:43,920 –> 00:53:45,200
از فرزندان در
1663
00:53:45,200 –> 00:53:48,160
همان سربار هستیم.
1664
00:53:48,160 –> 00:53:49,440
از طرف دیگر
1665
00:53:49,440 –> 00:53:52,800
وقتی طراحان به موضوعاتی در اینجا
1666
00:53:52,800 –> 00:53:55,119
نگاه کردند، به این نگاه کنید شما در همان هسته
1667
00:53:55,119 –> 00:53:56,720
هستید هسته شما تغییر نمی کند شما در
1668
00:53:56,720 –> 00:53:57,680
همان هسته
1669
00:53:57,680 –> 00:53:59,440
هستید، لازم نیست حافظه را تغییر دهید
1670
00:53:59,440 –> 00:54:01,599
زیرا همان حافظه وجود دارد توسط
1671
00:54:01,599 –> 00:54:04,079
این رشته و این رشته استفاده می شود، شما فقط
1672
00:54:04,079 –> 00:54:05,119
باید تغییر دهید
1673
00:54:05,119 –> 00:54:08,400
که کدام قطعه کد اجرا می شود، بنابراین چند
1674
00:54:08,400 –> 00:54:09,040
رشته
1675
00:54:09,040 –> 00:54:12,720
به طور قابل توجهی سریع تر است، اما تنها در
1676
00:54:12,720 –> 00:54:13,599
1677
00:54:13,599 –> 00:54:16,319
صورتی مفید است که تعدادی رشته داشته باشید که
1678
00:54:16,319 –> 00:54:17,680
یک Re cpu bound
1679
00:54:17,680 –> 00:54:20,079
و برخی رشتهها که i o محدود هستند یا
1680
00:54:20,079 –> 00:54:21,119
1681
00:54:21,119 –> 00:54:23,280
فقط در این صورت به دیسک محدود میشوند، بسیار مفیدتر است و در
1682
00:54:23,280 –> 00:54:24,720
دنیای واقعی مهندسی نرمافزار
1683
00:54:24,720 –> 00:54:26,079
این اتفاق بسیار
1684
00:54:26,079 –> 00:54:27,599
خوب است، بنابراین این بخش تئوری
1685
00:54:27,599 –> 00:54:29,359
در مورد چیستی چند رشتهای است
1686
00:54:29,359 –> 00:54:32,720
حالا اجازه دهید به کد نگاه کنیم.
1687
00:54:32,720 –> 00:54:35,520
خوب است، بنابراین راه های متعددی برای
1688
00:54:35,520 –> 00:54:37,200
پیاده سازی کد چند رشته ای
1689
00:54:37,200 –> 00:54:38,480
وجود دارد که دوباره کدهای چند رشته ای در پایتون مشکلاتی وجود دارد،
1690
00:54:38,480 –> 00:54:40,000
من فقط
1691
00:54:40,000 –> 00:54:41,040
چند دقیقه دیگر
1692
00:54:41,040 –> 00:54:43,119
به این موضوع می رسم، بسیار خوب، ابتدا اجازه دهید
1693
00:54:43,119 –> 00:54:44,400
خود threading را به عنوان یک مفهوم درک کنیم،
1694
00:54:44,400 –> 00:54:45,440
بنابراین اگر می خواهید پیاده سازی
1695
00:54:45,440 –> 00:54:46,799
کدهای چند رشته ای چندین کتابخانه وجود دارد
1696
00:54:46,799 –> 00:54:47,520
1697
00:54:47,520 –> 00:54:50,319
threading یک کتابخانه داخلی است که
1698
00:54:50,319 –> 00:54:52,480
به عنوان بخشی از
1699
00:54:52,480 –> 00:54:55,599
مستندات پایتون پایتون به درستی در دسترس است، بنابراین می
1700
00:54:55,599 –> 00:54:56,880
توانید از این