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

  Рет қаралды 51,128

Николай Тузов — Golang

Николай Тузов — Golang

Күн бұрын

Разбираемся со внутренним устройством каналов: как реализована потокобезопасноть, как в буферизированном канале хранятся данные, какие интересные оптимизации там есть, как работает оператор Select, как каналы закрываются и др.
----
❤️ Если у вас есть желание поддержать развитие канала:
/ tuzov
boosty.to/nikolay.tuzov
- 👾 Мой канал в Telegram: t.me/ntuzov
- 🗣 Чат в Telegram: t.me/+zsSZ63wEJDs3NGVi
- 👀 Golang Digest: t.me/golang_digest - мои регулярные подборки интересных материалов по Go.
----
Другие мои видео про внутреннюю реализацию Go:
Map: • Как на самом деле устр...
Slice: • GoLang 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 #ntuzov

Пікірлер: 101
@nikolay_tuzov
@nikolay_tuzov Жыл бұрын
❤ Если у вас есть желание поддержать развитие канала: www.patreon.com/tuzov boosty.to/nikolay.tuzov - 👾 Мой канал в Telegram: t.me/ntuzov - 🗣 Чат в Telegram: t.me/+zsSZ63wEJDs3NGVi - 👀 Golang Digest: t.me/golang_digest - мои регулярные подборки интересных материалов по Go
@alexzav1327
@alexzav1327 7 күн бұрын
Это самый подробный разбор внутренностей каналов, что я смог найти, но при это всё изложено понятным языком. Спасибо большое!
@defanji8484
@defanji8484 Жыл бұрын
"Сегодня я вам покажу, что каналы на деле устроены легко и просто" Также видео: 41 минута))) Просто шутка, не обижаемся))) 101% пушка.
@nikolay_tuzov
@nikolay_tuzov Жыл бұрын
Всё так))
@vic_shine
@vic_shine Жыл бұрын
Отличное объяснение 😘 побольше бы таких видео про внутрянку Go!
@sinfulnest
@sinfulnest Жыл бұрын
Николай, спасибо за труд! очень круто - понятно, с нужными деталями и без ненужных упрощений!
@TheDavBag
@TheDavBag Жыл бұрын
лучшее что я видел по Go в ру туториалах, просто огонь!
@user-uw1nk8uk6m
@user-uw1nk8uk6m Жыл бұрын
Спасибо за труд, Николай! Отличные видео.
@mjeksonmjekson4469
@mjeksonmjekson4469 Жыл бұрын
Круто, больше таких разборов про нюансы реализации. Это очень интересно и познавательно.
@user-pt4iz2py6k
@user-pt4iz2py6k Жыл бұрын
Спасибо огромное за ролик! ❤ Вот это я понимаю разбор, вот это уровень! Отлично переплетённые части анимации, уточнений, ухода в самую маковку кодовой базы и ёмких лаконичных выводов! Как всегда достаточно полно, чтобы понять и главное понять куда двигаться и вовремя сокращено, чтобы не перезагрузить в усмерть - это талан, и я рад, что вы, Старший разработчик категории 2, им обладаете xD Жду ролик про Планировщик, уверен в качестве! ¡Buena suerte en México, amigo! ❤
@mmkamron
@mmkamron Жыл бұрын
Долго ждали ) Надеюсь оно того стоит, 40 минут😮 Спасибо!
@nikolay_tuzov
@nikolay_tuzov Жыл бұрын
Думаю, стоит 😚 Я постарался минимизировать количество воды, и очень долго работал над структурой. Надеюсь, не зря)
@mmkamron
@mmkamron Жыл бұрын
Посмотрел на одном дыхании, все четко и без воды👍Еще раз благодарю за этот прекрасный разбор каналов.
@phnxbr
@phnxbr 10 ай бұрын
Николай, у вас талант объяснять, и понятно, что требуется очень много времени на подготовку даже небольшого видео
@user-xj5up2yq6e
@user-xj5up2yq6e Жыл бұрын
Отличная подача материала! Спасибо автору
@denissokolov4029
@denissokolov4029 Жыл бұрын
Невероятно крутой видос, много полезного материала, объясняемого не то что бы сложным языком. Сейчас как раз готовлюсь к собесу на го дева, очень помогло, спасибо!
@Iongjump
@Iongjump Жыл бұрын
Вау, какое глубокое объяснение. Спасибо! Иллюстрации - моё почтение)
@UAStriker
@UAStriker Жыл бұрын
Спасибо за столь подробную информацию
@micbalmicbalov9955
@micbalmicbalov9955 Жыл бұрын
Спасибо! У вас редкое умение, объяснять сложные вещи простыми словами.
@Maxlyaptsev
@Maxlyaptsev Жыл бұрын
Это вам не "весь go за 20 минут"
@user-mx9pu5fb6v
@user-mx9pu5fb6v Жыл бұрын
Классное видео, спасибо! После этого видео стал лучше понимать материал про каналы из других источников, что улучшило понимание в целом
@smittychannel3252
@smittychannel3252 Жыл бұрын
Ура Видосик подъехал .Наконец-то каналы!!!
@bambalbino
@bambalbino 3 ай бұрын
Спасибо большое. Читал статьи, документацию, после твоего видео все встало на места.
@hurlimanjumamuratova2425
@hurlimanjumamuratova2425 17 күн бұрын
Спасибо большое, очень понравилось. Желаю успехов вам добрый человек☺️
@beyond6596
@beyond6596 Жыл бұрын
Николай, спасибо за труд! Очень интересно про атомики подробнее
@relax9332
@relax9332 Жыл бұрын
Очень качественный контент. Заочно поставил лайк!
@stanislav3827
@stanislav3827 Жыл бұрын
Моё уважение! Очень классное объяснение!
@whiteniga9489
@whiteniga9489 Жыл бұрын
Спасибо за виде! Очень познавательно
@liteleak4049
@liteleak4049 6 ай бұрын
Спасибо за огромню работу
@kwynto
@kwynto Жыл бұрын
Контент в кайф. Давай еще. Давай, давай, давай.
@user-ee1lx1pe7n
@user-ee1lx1pe7n Жыл бұрын
Супер! Спасибо огромное!
@DJamal1803
@DJamal1803 4 ай бұрын
Спасибо за видео очень классное видео побольше бы таких Про то как корутины или потоки работают
@maxreshe6410
@maxreshe6410 Жыл бұрын
Спасибо! Отличная подача материала. Сначала комиксы и объяснение, затем разбор кода. Респект!
@user-cu9yp3me5y
@user-cu9yp3me5y Жыл бұрын
Николай, отличное видео. Жду видео про атомики на разных архитектурах
@riendlyf
@riendlyf 2 ай бұрын
Дуже якісне відео. Автор топчик, кожна деталь розгорнута, за ці 40 хвилин автор розкрив фундамент з яким можна вільно програмувати. Дуже дякую тобі авторе ❤
@sergey5758
@sergey5758 Ай бұрын
Спасибо большое за видео, это лучшие видео по устройству го что я видел 👍🏻👍🏻👍🏻👍🏻👍🏻
@user-vt4fr8pu3d
@user-vt4fr8pu3d Жыл бұрын
Благодарю, лайк авансом!
@ifdru74
@ifdru74 5 күн бұрын
Спасибо за лекцию.
@user-bc8mo2ml1z
@user-bc8mo2ml1z Жыл бұрын
всё понятно, большое спасибо!
@andreypalamarchuk472
@andreypalamarchuk472 10 ай бұрын
Ждём видео про планировщик от Тузова 😊
@grigoriirochev440
@grigoriirochev440 Жыл бұрын
большой труд - и очень понятно, благодарю!
@Dantesik1
@Dantesik1 Жыл бұрын
Гениальнейшее видео, все понятно!
@PavPetukhov
@PavPetukhov 6 ай бұрын
Так-с, интересно, подписался
@user-eo9td2bj5q
@user-eo9td2bj5q 10 ай бұрын
спасибо- у вас талант расказывать про иные измерения инопланетным языком)- вот ненашто даже возразить)
@a98cb985
@a98cb985 Жыл бұрын
Очень спасибо!
@user-tv2hs5rs4t
@user-tv2hs5rs4t Жыл бұрын
Спасибо большое!
@virtualriot4062
@virtualriot4062 Жыл бұрын
Уже думал читать статью, а тут видео вовремя
@abonentnumber3283
@abonentnumber3283 9 ай бұрын
Редко я такое пишу. Молодец! Все наглядно.
@invisibleinvisible83
@invisibleinvisible83 Жыл бұрын
Спасибо 🙏🏻❤️
@user-zx4rj1gs4c
@user-zx4rj1gs4c Жыл бұрын
отличная подача материала, а еще отличные подкасты с крутыми ребятами, не забрасывай, пожалуйста, это
@kekstroke
@kekstroke Жыл бұрын
Очень интересно было бы послушать про concurrency в go простым языком. Не так много доступных ресурсов на эту тему и сама тема достаточно сложна)
@elvirakharunova1589
@elvirakharunova1589 4 ай бұрын
Большое спасибо за отличные, подробные объяснения! 😍😍😍
@andreipopov2700
@andreipopov2700 Жыл бұрын
Спасибо за видео
@puzz1372
@puzz1372 Жыл бұрын
Николай, про атомик очень интересно! Как это все устроено, почему работает именно так. Большое спасибо!
@noob-mp7jo
@noob-mp7jo 10 ай бұрын
Spasibo!
@Kuchaian
@Kuchaian Жыл бұрын
Ооочень крутое видео!
@ArtemCYOU
@ArtemCYOU Жыл бұрын
годно!)
@MicaelAlastor
@MicaelAlastor 10 ай бұрын
Очень достойная обучалка-объяснялка, всё понятно и доступно, спасибо.
@user-tt3xw7cs5s
@user-tt3xw7cs5s Жыл бұрын
я пока просмотрел только 3 минуты, но мне уже нравится
@ronalddavilla5602
@ronalddavilla5602 Жыл бұрын
Привет! Очень круто! Продолжай! Вопрос, в какой проге делать такие красивые картинки и схемы?
@nikolay_tuzov
@nikolay_tuzov Жыл бұрын
Схемы в основном тут делаю: excalidraw.com Но часть приходится рисовать прямо в PowerPoint, тогда меньше возни с анимацией. Гоферов просто в интернете нахожу.
@germanzak
@germanzak Жыл бұрын
Видео топ! Но у меня чуть глаза не вытекли, когда резко переключилась IDE на белый фон 😵‍💫
@mjeksonmjekson4469
@mjeksonmjekson4469 Жыл бұрын
Расскажи ещё про разницу string aka []byte. В чем преимущества той и другой структуры, в чем разница, когда использовать , и что происходит при обратной конвертации)
@romankonovalov2588
@romankonovalov2588 Жыл бұрын
ролик бомба, наверно лучший гофер в рус ютубе
@RomanAlexandrov
@RomanAlexandrov 11 ай бұрын
Блин, очень очень круто и понятно всё рассказал, делай свой курс по Го.)
@emotional_stuff
@emotional_stuff Жыл бұрын
контент - бомба
@mrmarkovniktgv3058
@mrmarkovniktgv3058 10 ай бұрын
Большое спасибо за видео, все очень понятно и интересно) Подскажите пожалуйста, где можно ознакомиться с такими подробностями о языке?
@proger150
@proger150 10 ай бұрын
Николай, вы ах*eнны!Спасибо за детализацию!
@user-hd9hw7nl1n
@user-hd9hw7nl1n Жыл бұрын
топ контент !!!
@user-nc8tl5cv6k
@user-nc8tl5cv6k Жыл бұрын
Спасибо за видео! Каналы перестали казаться чем-то инопланетным :) Вот такой вопрос возник: если по сути дела каналы реализованы отдельной библиотекой, и эту структуру может повторить любой разработчик, то зачем в го отдельный синтаксис чтения/записи в канал (оператор
@user-yt5qk6fi8m
@user-yt5qk6fi8m 4 ай бұрын
Наконец человек не делает вид, а на самом деле знает что такое го
@plush_penguin
@plush_penguin Жыл бұрын
Николай, какую IDE ты используешь?
@nikolay_tuzov
@nikolay_tuzov Жыл бұрын
GoLand от компании JetBrains
@user-fe6pi9vb6h
@user-fe6pi9vb6h 9 ай бұрын
Один момент не доконца понмаю, после парковки горутину, насколько я понимаю работу планировщика, она отправляется в глобальную очередь, соответственно после её пробуждения она возвращается в очередь (fifo/lifo?) на какой-либо процессор или там не все так просто?
@orifdjonergashev9472
@orifdjonergashev9472 Жыл бұрын
Привет! Классные у тебя разборы, разбери плз как работает планировщик go 1.20, а то я не нашел нормального урока
@nikolay_tuzov
@nikolay_tuzov Жыл бұрын
Такой ролик как раз в процессе сейчас
@SWOsong
@SWOsong 7 ай бұрын
Скажите, в каком редакторе автор демонстрирует этот урок? Тоже начал бы такой использовать, где столько информации внутренней и sandbox.
@nikolay_tuzov
@nikolay_tuzov 7 ай бұрын
Это GoLand - IDE от JetBrains. Он платный, но есть еще VSCode - бесплатный и тоже хороший. Я думаю, там всё это тоже есть.
@SWOsong
@SWOsong 7 ай бұрын
@@nikolay_tuzov Спасибо! Николай, как вы считаете, должен ли голангер по-умолчанию уметь работать с PostgreSQL, ElasticSearch, Mongo при собесе? У меня 90% отказов из-за отсутствия опыта по базам, но я всегда юзал самописные в своих разработках, а впрок учить просто так нет желания, да и не запомнится без долгой практики.
@lauhG3
@lauhG3 9 ай бұрын
а что если в sendq несколько спящих горутин. Условно одна спящая горутина с нужными данными, а другая горутина с абсолютно другими данными, что в этом случае ? Или в качестве спящей горутины берется только самая последняя горутина.
@736939
@736939 6 ай бұрын
7:40 Секундочку сами данные будут скопированны в канал или ссылки на данные?
@nikolay_tuzov
@nikolay_tuzov 6 ай бұрын
Значения, конечно же. Но сами значения тоже могут быть указателями, тогда в канал будут скопированы указатели.
@736939
@736939 6 ай бұрын
@@nikolay_tuzov Спасибо
@soundcloudlover
@soundcloudlover 10 ай бұрын
Если канал заполнен и горутина пытается в неё что-то записать, то как именно горутина получает этот поток (переменную), чтобы потом завернуть в очередь sudog?
@waffleboot
@waffleboot 8 ай бұрын
Про select не расказано как паркуется горутина если ни один из кейсов не сработает, ведь каналов в select может быть несколько. И как тогда просыпается горутина если ее будят по любому каналу и как она защищает себя от того, что проснулась, а возможности писать/читать уже нет потому что конкурентная горутина прочитала.
@robotomize7123
@robotomize7123 Жыл бұрын
Про атомики 100% нужно. Тема сложная, емкая
@OOOJohnJ
@OOOJohnJ Жыл бұрын
Осталось не понятным, почему isClosed это int32, а не bool или хотя бы int8
@nikolay_tuzov
@nikolay_tuzov Жыл бұрын
Это очень хороший вопрос. Если кратко - потому что пакет атомик не поддерживает bool. Хотя, с 1.19 поддерживает, но на самом деле, под капотом там всем равно int. Можешь также почитать обсуждение в комментах к моему посту на эту же тему: t.me/ntuzov/26 А если захочется еще глубже копнуть, добро пожаловать в наш чатик Gopher Club, там у нас есть знатоки, которые помогут разобраться даже в самых низкоуровневых вопросах.
@user-jq3nx1gb2m
@user-jq3nx1gb2m Жыл бұрын
В момент когда горутина блокируется, кто разблокирет мьютекс? Сама горутина перед блокировкой?
@volodya-nrg
@volodya-nrg Жыл бұрын
Запишите пожалуйста разъясняющий ролик про atomic, а то все дойти до них не могу. За ранее спасибо.
@leenur4749
@leenur4749 2 ай бұрын
А как Reader-горутина прочитает данные из канала, если Sender перед тем как пойти спать не разблокировал мьютекс
@Hande_hoch
@Hande_hoch Жыл бұрын
незаслуженно мало подписчиков и просмотров. и лайков
@slavanikulin8069
@slavanikulin8069 Жыл бұрын
про атомики интересно было бы
@artemrusinov3034
@artemrusinov3034 Жыл бұрын
Поделитесь первоисточником
@nikolay_tuzov
@nikolay_tuzov Жыл бұрын
Их много, я для ролика прорабатываю много статьей, видосов, докладов
@user-eo9td2bj5q
@user-eo9td2bj5q 9 ай бұрын
спасибо за простату) - ты умеешь довести человека до отчаяния)
@oleksandrdorogyh5265
@oleksandrdorogyh5265 Жыл бұрын
как то странно прозвучало "если вы используете каналы вам не надо задумываться об элементах синхронизации" что-то не то с причинно-следственными связями точно также я могу сказать "используя мютекс, мне не надо задумываться о каналах, как и в каком порядке их открывать/закрывать, как избегать записи/чтения в/с нил каналами, как избежать паники при работе с каналами и т.д.и т .п.". Что звучит еще более страшно ))) стоит задача, организовать работу двух и более потоков/горутин и в каждом конретном случае ты выбираешь какой элемент синхронизации использовать мютекс или что-то другое, в том числе канал
@nikolay_tuzov
@nikolay_tuzov Жыл бұрын
А что не так с причинно-следственными связями? Давайте я задам несколько наводящих вопросов: Вот возьмём мапу - может ли несколько горутин одновременно добавлять в неё элементы? А в канал они могут одновременно писать? Почему? Если этого недостаточно, можем обсудить подробней в нашем чатике: t.me/+WyjmnP6la_QyYjAy Вести переписку в комментариях не очень удобно.
@nikolay_tuzov
@nikolay_tuzov Жыл бұрын
Если кратко - канал не является примитивом синхронизации. Канал сам использует примитив синхронизации, а именно - встроенный мьютекс. И благодаря этому, разработчику не требуется прикрывать канал внешним мьютексом. Надеюсь, так понятней.
@N4g1b4t0r
@N4g1b4t0r 3 ай бұрын
@nikolay_tuzov а mutex точно полностью блокирует буферизированный канал? Чтение невозможно одновременно с записью?
@timurkash
@timurkash Жыл бұрын
Каналы без горутин - это что-то из серии велосипед с одним колесом
Как на самом деле устроен тип Map в Golang? | Golang под капотом
34:33
New Gadgets! Bycycle 4.0 🚲 #shorts
00:14
BongBee Family
Рет қаралды 13 МЛН
Sigma Girl Education #sigma #viral #comedy
00:16
CRAZY GREAPA
Рет қаралды 102 МЛН
Why You Should Always Help Others ❤️
00:40
Alan Chikin Chow
Рет қаралды 34 МЛН
Про микросервисы за 8 минут
8:01
Merion Academy
Рет қаралды 115 М.
GoLang Slice в деталях, простым языком
32:09
Николай Тузов — Golang
Рет қаралды 72 М.
Хэш-таблицы за 10 минут
13:01
Николай Тузов — Golang
Рет қаралды 120 М.
New Gadgets! Bycycle 4.0 🚲 #shorts
00:14
BongBee Family
Рет қаралды 13 МЛН