Изучаем Golang. Урок №23. Concurrency (5). Context

preview_player
Показать описание
В данном видео мы продолжаем изучать язык Go (Golang). Мы узнаем, что такое context, для чего он применяется. Разберем виды контекстов и операции над ними. Также рассмотрим паттерн конкурентной работы - worker pool, где мы задействуем большую часть наших знаний по инструментам синхронизации.

0:00 Содержание
Рекомендации по теме
Комментарии
Автор

Хороший ролик. Есть нюанс на 23-й минуте: "И каждый воркер сталкивается с ситуацией" и описана ситуация не совсем корректно. select он в рандомном порядке обходит каналы. Поэтому может быть и 500 + worker_count погрешности. То есть цифра 502 получилась потому что на 2-м условно воркерке select провалился не в завершение контекста, а в обработку возведения в квадрат. Вот и всё. Select не гарантирует исполнение сверху вниз. Это не Switch.

muudovg
Автор

Очень спасибо, на вид тема сложная, но объяснил все доходчиво

acb
Автор

Очень хорошее видео по контексту. Главное наглядно и чётко по полочкам) Спасибо

MaximRovinsky
Автор

мне действительно интересно, ставлю лайк и подписываюсь ! (не представляю есть ли другие толковые уроки по GO на русском)

andreichemeris
Автор

Ого, новый канал по Го обнаружил
годно

Levelord
Автор

One of the best explanations of the context topic

DaniilHarik
Автор

С первого раза трудно вникнуть. Хотелось бы разобрать рабочие фрагменты программ. Доступ к базе и сетевым сервисам. Может нет, все вроде сказано. Спасибо.

lecfqkl
Автор

Спасибо тебе большое за труд! Есть пару ошибок(оговорок) из-за которых возникает путаница небольшая: 1) воркеров у тебя запускается 13(так как запускаешь с 0 и до <=12) 2) при значении i==500 итерация идет 501я(опять же начинается с 0), сигнал записывется, воркеры продолжают работу, и при 502 итерации воркеров switch завершает работу.

hisydcf
Автор

спасибо огромное за видео, лучшее по контексту на всем ру-пространстве по GO.. подскажите непонятные моменты.. если брать небуферезированный канал, у нас во втором цикле от 0 до 1000 берется и помещается в канал 0, потом анонимная функция блокируется, передает управление, и с этим значением работает одна горутина или все (из воркеров)? и эти воркеры будут висеть до конца программы, даже после всех операций с каналами?

cipplant
Автор

Если я правильно понял, то в примере с отменой контекста на 22:10 вызывается cancel, но это не значит, что цикл завершится, или воркеры перестанут работать, потому что:
Канал numberToProcess не закрыт и select в воркерах может выбрать как numberToProcess так и Done, следовательно воркеры продолжат работать(сам автор говорит, что воркеры "успели" взять значения). Чтоб этого не было, нужно после cancel прописать return чтоб ничего больше не приходило.
Не уверен на счет defer close(numberToProcess), потому что я тестил и создал 1000 горутин, и вроде как GC их все чистит, но если вдруг кто поумнее придет, надеюсь и мне объяснит нужен или нет.

kotifnat
Автор

Замечание
Приблизительно на 17:00-17:20
Select будет читать из пустого канала - в val будет лежать нулевое значение типа. «Зависания» не произойдёт. Проверка на ok - чтобы не обрабатывать «ненужные нули»

vomrpvq
Автор

Не совсем понял как работает отмена по Таймауту. на 93 строчке добавил
for i := 0; i < i++ {
* 20)
fmt.Printf("%s", "d")
}
и через 20 Millisecond воркер продолжил работать, выводя в консоль символы. По сути context.WithTimeout не дает запуститься новому воркеру, но при этом не прерывает текущую горутину, и если там что то тяжелое (обработка видео) она так и продолжить работу и наше ожидания что через 20 миллисекунд мы проложим работу окажутся фейком

evgen_sr
Автор

Показал патерн, но не объяснил, что из всего этого кода является его шаблоном. Те я не понял ни суть, ни шаблона. Код понятный и логичный, но что из этого подчеркнуть, кроме как работу с контекстом и каналами.

fwfeosh
Автор

Слющай почему такой названий у гихаб, а?

esimitley
Автор

Почему мы использовали адрес wg а не просто wg?

sanchosplay
Автор

Плохое качество текста. Шрифт нужно увеличить. Материал отлично.

lecfqkl
Автор

А автор канала вообще еще жив? Что-то ни новых материалов, ни таймкодов =(

georgiy_kulagin