forked from RedHatOfficial/GoCourse
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlesson4_ru.slide
More file actions
98 lines (76 loc) · 4.46 KB
/
lesson4_ru.slide
File metadata and controls
98 lines (76 loc) · 4.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
Урок 4. Параллельность (Concurrency) в Go
Lesson 4
27 Jul 2025
Tags: golang, go
Перевод команды GoCourse
Stanislav Kozina <skozina@redhat.com>
Red Hat, Inc.
https://github.com/RedHatOfficial/GoCourse
* Источники
- [[https://github.com/RedHatOfficial/GoCourse]]
.image ./common/qr_address.png
* Gophers
#The Go gopher was designed by Renee French. (http://reneefrench.blogspot.com/)
#Source https://golang.org/doc/gopher/fiveyears.jpg
#The design and this image is licensed under the Creative Commons 3.0 Attributions license.
.image ./common/fiveyears.jpg _ 900
* Параллельность
- Определение: вычисления, происходящие одновременно
- Даже на одном процессоре (ядро создаёт это ощущение)
* Коммуникация через очереди сообщений
- Аналогия телефонных звонков
- Звонок телефона: блокирующий вызов
- Автоответчик: неблокирующий вызов (длина плёнки = размер очереди)
- Несколько получателей: call-центр
- Несколько отправителей: конференц-связь
* Потоки и горутины
- Напоминание: потоки разделяют память
- Go-рутины — это легковесные потоки, дешёвые для создания
- Должно быть нормально создавать тысячи горутин
- Внутренне мультиплексируются через пул потоков
- Создаются простым ключевым словом go
* Горутины
.play lesson4/goroutines.go
* Каналы
- Способ передачи данных между горутинами
- Тип данных является частью типа канала
- По умолчанию блокируется при передаче/приёме (но может быть буферизирован)
- Один оператор для отправки и получения из канала
- Создаётся с помощью make()
.code lesson4/chan.go
* Каналы
- Обратите внимание, что это условие гонки.. подробнее об этом позже
.play lesson4/chan2.go
* Каналы
- Небуферизированные каналы действительно блокируются (и golang любезно обнаруживает взаимоблокировку)
.play lesson4/chan3.go
* Буферизированные каналы
- Размер буфера как второй аргумент make()
.play lesson4/chan4.go
* Закрытие каналов
- Каналы можно закрыть с помощью close()
- Читатели могут проверить закрытые каналы, используя необязательный второй возвращаемый аргумент
- Альтернативно читатели могут обнаружить закрытый канал с помощью цикла по range
* Обнаружение закрытого канала с возвращаемым значением
.play lesson4/chan_close.go
* Обнаружение закрытого канала с range
.play lesson4/range.go
* Select на нескольких каналах
- Вы можете ждать на нескольких каналах одновременно, используя select
* Select на нескольких каналах
.play lesson4/select.go
* Паттерн quit + ack
.play lesson4/quit_ack.go /^package main/,/^func main/
* Паттерн quit + ack (продолжение)
.play lesson4/quit_ack.go /^func main/,/^}/
* Выбор по умолчанию
- Действие по умолчанию, если все другие действия заблокированы
* Выбор по умолчанию
.play lesson4/default.go
#last slide
* Больше Gophers
#The Go gopher was designed by Renee French. (http://reneefrench.blogspot.com/)
#Source https://golang.org/doc/gopher/bumper.png
#The design and this image is licensed under the Creative Commons 3.0 Attributions license.
.image ./common/bumper.png _ 900
Пробуйте запускать свои горутины и обмениваться данными через каналы — это весело и полезно!