Как на самом деле устроены каналы в Golang? | Golang channels internals

Опубликовано: 30 Август 2022
на канале: Николай Тузов — Golang
61 тыс
3 тыс

Разбираемся со внутренним устройством каналов: как реализована потокобезопасноть, как в буферизированном канале хранятся данные, какие интересные оптимизации там есть, как работает оператор Select, как каналы закрываются и др.
----

️ Если у вас есть желание поддержать развитие канала:



- Мой канал в Telegram:
- Чат в Telegram:
- Golang Digest: - мои регулярные подборки интересных материалов по Go.
----

Другие мои видео про внутреннюю реализацию Go:
Map:
Slice:

Тайминги:

00:00 Вступление
00:38 Какие свойства каналов интересно изучить?
01:22 Проектирование каналов
01:32 В какой области памяти хранятся каналы?
02:00 Структура канала
04:08 Реализация свойств: goroutine-safe и FIFO
05:04 Как работают буфер канала и mutex
07:18 Передача данных в канал
08:21 Получение данных из канала
08:38 Переполнение буфера
09:05 Как устроен планировщик (Scheduler)
10:14 Как поставить горутину на паузу
10:56 Как разбудить горутину: очередь спящих горутин - sendq
13:49 Чтение из переполненного канала
15:57 Пробуждение спящей горутины Sender
17:43 Чтение из пустого канала
18:44 Передача данных напрямую между стэками двух горутин
19:11 Небуферизированные каналы
19:37 Итоги по изучению интересных свойств каналов
20:35 Изучаем код реализации каналов
28:22 Изучаем поведение канала вживую с помощью дебагера
35:23 Как работает Select
37:14 Закрытие канала
38:13 Код закрытия канала
39:20 Итоги: почему каналы спроектированны именно так?
40:48 Заключение


Смотрите видео Как на самом деле устроены каналы в Golang? | Golang channels internals онлайн без регистрации, длительностью 41 минут 31 секунд в хорошем hd качестве. Это видео добавил пользователь Николай Тузов — Golang 30 Август 2022, не забудьте поделиться им ссылкой с друзьями и знакомыми, на нашем сайте его посмотрели 61 тысяч раз и оно понравилось 3 тысяч людям.