Михаил Непряхин: Так семь привет как видно смешно
Михаил Непряхин: поставьте пожалуйста. Плюс,
Михаил Непряхин: да Окей
Михаил Непряхин: так сегодня сегодня план какой
Михаил Непряхин: Сейчас ээ
Михаил Непряхин: посмотрим на паттерны с гурутинными Каналами
Михаил Непряхин: и Начнем же
Михаил Непряхин: что-то Верхнего, уровня. Его изучать Вот Например Докер в губернаторы. Сегодня Начнем изучать
Михаил Непряхин: ну точно Не То что изучать а
Михаил Непряхин: как этим пользоваться и какой функционал Минимальный нам необходим
Михаил Непряхин: для работы для жизни
Михаил Непряхин: так
Михаил Непряхин: значит ромного по точку в гоу не Так много важно, как бы знать синтаксис не настолько важно, знать интаксис как просто важно, понимать вот минимально как оно
Михаил Непряхин: а устроено Какие вообще есть инструменты
Михаил Непряхин: и как бы это все равно синтез там закрывать ну там не знаю что можно делать с закрытым каналом что можно делать
Михаил Непряхин: а
Михаил Непряхин: он и
Михаил Непряхин: каким там
Михаил Непряхин: что можно Делать в закрытом чтении писать что Будет и так далее это Не так важно как важно просто вот примерно понимать Использование в каких случаях что используется
Михаил Непряхин: значит основные примитивы синхронизации которые у нас есть
Михаил Непряхин: это
Михаил Непряхин: как я уже говорил в этом юдекс
Михаил Непряхин: основной ну то есть чтобы Избежать гонки данных если. Вдруг Мы из нескольких. Гурутин
Михаил Непряхин: хотим, писать в одно, место,
Михаил Непряхин: чтобы здесь не получилась гонка данных вот нужно нужен ютокс а Мюток смотрел как раз таки упорядочивая доступ к этой Области. Памяти и просто Одновременно две грутины к этой памяти не могут получить доступ они будут обязательно это делать по очереди с Помощью меткса. И тут может Быть крутил типа там
Михаил Непряхин: десять тысяч
Михаил Непряхин: просто если их будет очень много то сами понимаете это будет узким горлышком и бутылочным горошком и в общем-то ну. Вот Программа, просто очень медленно работать и как бы потеряется преимущество того что у вас эээ
Михаил Непряхин: голос рутинами что у вас Несколько потоков потому что все убьется об это Место, Поэтому как бы да чтобы Избежать Гонки данных Можно использовать мюзикл. А еще Можно писать программы так Что Мы Несколько грутин не обращались к одной и той Же памяти
Михаил Непряхин: ну потом Там например. Еще примерчики какие То будут
Михаил Непряхин: а дальше значит следующий примитив это Воингруппа
Михаил Непряхин: вы группа это просто счетчик просто счетчик для того чтобы понимать когда мы запустили
Михаил Непряхин: сколько ты грузин
Михаил Непряхин: Десять тысяч
Михаил Непряхин: мы
Михаил Непряхин: Хотим, знать когда они все закончатся
Михаил Непряхин: допустим нам нельзя идти дальше Пока все бурутины не закончились
Михаил Непряхин: Ммм
Михаил Непряхин: Мы просто заводим вытгруппу такой счетчик и когда этот счетчик равен нулю То Мы понимаем все Грузины закончились можем идти дальше
Михаил Непряхин: вот и канал
Михаил Непряхин: канал Это
Михаил Непряхин: что-то вот подобное
Михаил Непряхин: вот как Бы есть какая То ячейка памяти Куда мы хотим, писать или кто то хочет читатель кто хочет писать есть мютекс
Михаил Непряхин: и для того чтобы руками допустим отослать у нас чтобы вот руками эти очереди не писать
Михаил Непряхин: у нас есть прямо Фест Класс объект
Михаил Непряхин: канал то есть как бы Аналогов в других языках До появления каналов гол Не было
Михаил Непряхин: и ну Сейчас там уже в других языках тоже типа кудрина Раз, то появилось но это Все таки не Фст вас объекты в этих языках а вот именно в голову это Ферст класс объект
Михаил Непряхин: а Что как Бы да он Конечно там сложный Под капотом Но Тем Не Менее просто вы можете довольно легко синхронизировать несколько гортин
Михаил Непряхин: вот и собственно говоря больше ничего и Нет
Михаил Непряхин: То есть важно понимать что мы руками если, у Нас есть ядра процессора мы не поднимаем руками треды
Михаил Непряхин: мы как бы декларативно говорим гол. Хотим? Десять тысяч потоков. Запустить а уж. Как там гошка раскидает это по ядрам это уже дело планировщика ну и соответственно если у нас этих ядер
Михаил Непряхин: девяносто шесть
Михаил Непряхин: то Голову. Эффективно раскидает Эти, бурутины равномерно по этим ядрам равномерно утилизируя все наши ресурсы
Михаил Непряхин: то есть как бы если вот так вот посмотреть оно довольно таки как бы ну с точки, зрения абстракции, все очень классно сделано и все удобно
Михаил Непряхин: и из того Что Мы еще Не смотрели Весь контекст
Михаил Непряхин: но контекст это по Сути ну У него первое назначение это дедлайн какой-то поставить что вот гурутина должна работать,
Михаил Непряхин: пять секунд
Михаил Непряхин: ой
Михаил Непряхин: значит гуртина должна работать, пять секунд
Михаил Непряхин: Если за пять секунд она
Михаил Непряхин: не отработала продолжает работать, просто закрывая Ее Принудительно то есть вот этот функционал
Михаил Непряхин: а для контекста
Михаил Непряхин: и то же самое мы можем это руками сделать когда у нас контекст проброшен а вообще в гол, принятый контекст, пробрасывать у всех картины
Михаил Непряхин: и Мы можем руками сказать убейся типа ты нам, уже не нужна Там то есть вот Мы запустили в рутины да у нас же как бы должен быть какой то механизм какая то ручка чтобы сказать что. Все хватит закрывайся
Михаил Непряхин: то есть когда Мы хотим, данные получить, Этой ручкой является, Канал Мы через Канал Эти данные можем получить, а когда нам
Михаил Непряхин: Никакие данные Не надо получить Грузины просто Там работают Но Мы понимаем Уже смысл в ней Нет Мы Не, можем с помощью Контекста и сказать Убейся
Михаил Непряхин: и еще там есть несколько функций у контекста но основные вот эти потом там контексту уделим больше Времени просто Сейчас я не вижу смысла в этом больше Времени уделять
Михаил Непряхин: Сейчас. Цель. Просто и
Михаил Непряхин: вот аа и там Еще это повторим
Михаил Непряхин: так
Михаил Непряхин: значит проон
Михаил Непряхин: про каналы да
Михаил Непряхин: там и
Михаил Непряхин: как Можно использовать канал
Михаил Непряхин: ну вот смотрите здесь насколько уборки
Михаил Непряхин: а сигнтура. У него какая что он принимает это тут просто номер у оркера по сути название уоркера и каналу канал на запись
Михаил Непряхин: то есть просто имея вот эту сигнатуру мы понимаем что этотворкер эта функция она принимает канал
Михаил Непряхин: и в этот канал этотворкер будет писать
Михаил Непряхин: это значит Что мы Можем создать этот самый канал
Михаил Непряхин: и и
Михаил Непряхин: читайте этот канал как, Обычный свайс то есть у нас форренч принимает канал пока канал открыт форренч будет крутиться когда канал закроется мы из циклов фор выйдем
Михаил Непряхин: и соответственно
Михаил Непряхин: вот как бы классический патруль Мы не создали этот канал
Михаил Непряхин: а и читаем его можем прямо здесь же начать читать в грутине
Михаил Непряхин: вот просто сразу, начинаем читать а Дальше уже там разбираемся как запустить бургер и так далее, ну так как здесь я хочу чтобы ну у меня, сразу ну чтобы слипы Никакие не Делать, вот я просто в конце цикл. Фор запускаю
Михаил Непряхин: и соответственно я в нем кручусь как только канал закроется ну его здесь получается никто не закрывает да вот Поэтому как бы здесь у меня, просто бесконечный цикл
Михаил Непряхин: вот а когда канал закроется я из него Выйду
Михаил Непряхин: и дальше я запускаю здесь вот десять оркеров и в Эти, воркеры я передаю этот канал
Михаил Непряхин: и каждый воркер
Михаил Непряхин: что он сделает он спит секунду
Михаил Непряхин: и дальше в канал записывает хеллоу фромборер
Михаил Непряхин: как он работает
Михаил Непряхин: ну и всяк расчет он так бесконечно будет работать
Михаил Непряхин: значит если Рисовать этот патрон как оно выглядит
Михаил Непряхин: значит у нас есть
Михаил Непряхин: какой ты синхронный код
Михаил Непряхин: и у нас задача
Михаил Непряхин: а что-то распаралелить
Михаил Непряхин: То есть мы понимаем что мы конечно можем здесь в циклифор крутиться
Михаил Непряхин: ну например, нам надо сделать десять запросов
Михаил Непряхин: к какому-то и
Михаил Непряхин: десять запросов клипе мы конечно можем их по очереди сделать да но то есть один, запрос сделали а каждый запрос секунда,
Михаил Непряхин: каждый запрос секунды можем вот делать по очереди но просто будут занимать десять, секунд все это дело то есть мы здесь десять секунд крутимся а потом результат получаем здесь
Михаил Непряхин: печатаем
Михаил Непряхин: вот но гол. Позволяет легко взять это дело, распаралелить
Михаил Непряхин: и запустить э десять гурутин ну Там условно одна Грутина вторая Грутина третья Грутина четвертая ну десять
Михаил Непряхин: и Мы создаем
Михаил Непряхин: канал пробрасываем
Михаил Непряхин: вовнутрь
Михаил Непряхин: всех гортин этот канал ну и так далее канал это указатель
Михаил Непряхин: То есть во всех грутинках, есть указатель
Михаил Непряхин: все Грутины в этот канал пишут
Михаил Непряхин: а Мы потом дальше здесь просто этот канал аа читаем
Михаил Непряхин: и
Михаил Непряхин: гонка данных не возникает
Михаил Непряхин: то есть смотрите Одновременно в одну область памяти У Нас пишут десять бутин но гонка данных Не возникает потому Что там
Михаил Непряхин: на ютаксах это все сделано грамотно и
Михаил Непряхин: все десять. Бутин в него пишут параллельно
Михаил Непряхин: ну конечно по очереди в один момент Времени, Срок только одна рутина какая-то Пишет автора ждет. И Тогда они нам По очереди пишут Там очень-очень много Оптимизаций признают как внутреннее устройство канала это просто том
Михаил Непряхин: но с ума можно сойти Сколько Там оптимизации чтобы оно работало быстро к слову оно работает реально быстро
Михаил Непряхин: и дальше Мы вот спокойненько, когда вот эта вот часть синхронная синхронная параллельная она закончилась мы здесь и
Михаил Непряхин: и результат этот читаем и ну кто-то должен конечно канал когда-то закрыть чтобы мы из него, вышли но вот игрушечный, пример здесь без всего то есть вот он такой минимальный
Михаил Непряхин: а тут тот он и нанесли минималистичный, синтаксис У меня в гол правда эти вещи Делать Очень приятным
Михаил Непряхин: дальше что Еще из интересного значит смотрите есть удобные функции, Ну то есть вот когда со временем что-нибудь Связано
Михаил Непряхин: значит Что У нас есть У нас есть функция тайм тик
Михаил Непряхин: это диккер
Михаил Непряхин: возвращает То есть вот эта функция тайм-тик она возвращает Канал она Возвращает Канал ведь он типизирован только на Чтение потому что Стрелка Слева от ключевого своего. Чен и он Возвращает время
Михаил Непряхин: короче говоря Удобно Так Делать когда У вас Бесконечный. Цикл и вы хотите. Какой-то ну. Условно Уркер который каждую Секунду будет эээ Тикать
Михаил Непряхин: ну. Или не секунду что угодно Можно сделать
Михаил Непряхин: вот значит Можно сделать таймер
Михаил Непряхин: таймер это когда вам не нужно в цикле что То бесконечно вам просто надо чтобы оно сработало то есть вот дедлайны через таймеры Тоже делаются значит вы делаете от нее таймер говорите через Сколько он должен Сработать
Михаил Непряхин: и этот канал
Михаил Непряхин: сработает на чтение ровно через это время сколько вы указали один Раз он заработает вот потом мы его должны использовать и прибрать обязательно заступать
Михаил Непряхин: То же самое Э можно Сделать вот Таким способом То Есть вот Это! Вот все можно Сделать одной строчкой автор То Есть Если посмотреть что Там в авторе просто нью, Таймер Возвращается отце, и сразу Канал
Михаил Непряхин: и из Него Оттекается Раньше была проблема что надо Было обязательно закрывать ну вот видите вот вот эта штука
Михаил Непряхин: чтобы ресурсы не утекали Но по фиксили сверхсоедини двадцать три и
Михаил Непряхин: значит вот сделали вы канал
Михаил Непряхин: не буферазированный
Михаил Непряхин: с пустой структурой здесь канал который возвращает Одну структуру он не буффризированный то есть там Нет буфера
Михаил Непряхин: значит и в Селекте вы читаете Этот канал
Михаил Непряхин: а допустим вы Там делаете запрос какой-то
Михаил Непряхин: магурутина запустили эта грутина делает запрос куда-то во внешние пять он медленный
Михаил Непряхин: и вы ставите дедлайн вы говорите значит короче пять секунд я Жду,
Михаил Непряхин: если за пять секунд
Михаил Непряхин: а эта апе не ответит,
Михаил Непряхин: я не получу ничего в канале То я пишу тайм-аут Иду дальше
Михаил Непряхин: и в общем-то Вот Контекстом
Михаил Непряхин: По Сути То же самое делает То что, будет руками Не писать это то же самое есть в контексте, ну про контекст потом Поговорим вот и Ну Реально как бы вот использоваться Две вещи
Михаил Непряхин: популярные значит когда надо один Раз что-то Вот в селе где-то обычно Используется тайм Автор когда просто Вот канал через Пять секунд Должен Вернуть какое-то время
Михаил Непряхин: и вторая версия это вторая штука это тикер который просто тикает Бесконечный цикл
Михаил Непряхин: то есть вы таймер тикер рядом удобной штуки
Михаил Непряхин: их нужно знать
Михаил Непряхин: так и его значит пропаторные
Михаил Непряхин: ну вообще как бы есть Вот значит есть
Михаил Непряхин: видосик Еще мало очень пропаторный что там с много с Этими Каналами что Можно Найти
Михаил Непряхин: короче ладно У бога все показать Убовна Есть видео где Там вот про паторные но реально как бы Если вы начинаете на каналах лепить какие-то паттерны вы прямо очень сильно усложняете код
Михаил Непряхин: и Поэтому Э ну какие То сложные патроны на каналах в рутинах лучше. Не надо делать
Михаил Непряхин: тайоме
Михаил Непряхин: т д
Михаил Непряхин: Плагин с прокси Уличный
Михаил Непряхин: вот Реально если Мы посмотрим что вообще обычно вы хотите. Делать с каналами и гуртинами
Михаил Непряхин: это выглядит следующим образом
Михаил Непряхин: вообще всего четыре таких. Основных кейса Использования
Михаил Непряхин: значит первый
Михаил Непряхин: и это
Михаил Непряхин: вы ну. Вы стесь на огромный код и вы понимаете
Михаил Непряхин: что вы хотите, что то сделать
Михаил Непряхин: э в многопоточке ну или не много по точке а синхронно то у нас как бы и так. Всегда все синхронно да Но вот если у вас просто гомак бокс один то Будет просто синхронно а если больше то будет еще и синхронно
Михаил Непряхин: или скучно как параллельно
Михаил Непряхин: а вы запускаете, э гурутину Там одну
Михаил Непряхин: а или десять,
Михаил Непряхин: и дальше продолжаете, работу
Михаил Непряхин: то есть вот оно отработало и вы дальше работаете оно обычно Всегда так то есть как бы там какого-то в библиотеках там очень Много чего можно увидеть люди много разные придумывают на гурутинных и каналах вот так вот в реальной жизни что, вам нужно это вот обычно вот так вот
Михаил Непряхин: значит второй вариант это когда вы так распознанным Человеком покуда по Порядку. Сейчас посмотреть про мир был Входе и начинал
Михаил Непряхин: значит и
Михаил Непряхин: какой то поток вот он идет,
Михаил Непряхин: входных данных
Михаил Непряхин: Поэтому вы делаете,
Михаил Непряхин: канал
Михаил Непряхин: и передаете, его ну в те же самые десять бурутин
Михаил Непряхин: и вас не интересует какой там результат либо лишь бы ошибок не было даже если ошибки есть они там в блоге запишутся и все и идете дальше то есть вы передаете этот канал в эти десять бурутин
Михаил Непряхин: и допустим в канале Канал тоже кто-то Пишет ну там не знаю как в канаву допустим попадет десять тысяч сообщений и вот эти десять грутин параллельно. Их перемен обработают
Михаил Непряхин: ну третий вариант когда у вас есть и входные данные и выходные данные вам Тоже, важны
Михаил Непряхин: Поэтому вы также спускаете эти десять грутин
Михаил Непряхин: и вы в Канал вот в этот вот пишете эти десять минут пробрасываете оба. Канала в гурутины. В канал вы в этот пишете эти гурутины. Его читают а результат который они получают они пишут выходной Канал и этот выходной Канал вы здесь читаете
Михаил Непряхин: ну и четвертый вариант это когда у вас выходных данных нет но есть выходные данные Вы делаете этот выходной Канал Аут передаете его в Эти десять. Гортин Ну, Тут в общем-то Всегда Новый Канал Передаем в грутины чтобы Не Могли. С Ним что-то сделать
Михаил Непряхин: а дальше вы здесь этот Канал опять же Читаете То есть У вас Нет выходных данных Для грузии но грутины что, то какую то работу делают, и выходные данные пишут и вы их читаете
Михаил Непряхин: и в общем-то вот эти кейсы и
Михаил Непряхин: вот и в коде если посмотреть как это выглядит
Михаил Непряхин: так ну вот смотрите у нас везде син группы будут потому, что. Без воен групп и
Михаил Непряхин: нунь
Михаил Непряхин: нам, либо спать придется либо что-то изобретать свои военные группы может вы их группа нам, дает возможность вот здесь вот
Михаил Непряхин: а не ждать лишнего времени
Михаил Непряхин: как только все гуртины отработают вот они тут, запускаются вот одну, штуку здесь Запускают Запускают одну, Картину и жду
Михаил Непряхин: и я здесь сразу узнаю как только Она закроется и пойду дальше
Михаил Непряхин: а Что вот Что я здесь делаю ну паттер началудобен и Тем Что смотрите сделаю здесь да и сразу у меня здесь ворот не запустится, сделаю десять тысяч десять тысяч бротин запустится, сделаю один Но одна, грудь не запустится,
Михаил Непряхин: вот и это все Будет Продолжать работать То есть вот этим удобен этот патер
Михаил Непряхин: он
Михаил Непряхин: значит инкриминичу здесь в Войнупу счетчик, и передаю сразу же указатель внутрь воркера
Михаил Непряхин: и название бургера передаю просто какая-то Грутина по очереди вот эта. Вот Конвертация У Меня, эн это инт я его конвертирую, в старингу и конфинирую с Гурутина горо тин горучи надо было назвать
Михаил Непряхин: так вот и даже запускается воркер
Михаил Непряхин: значит в диффере здесь сразу делаю дан то есть как, только бурутина запустится чтобы вот этот счетчик Внутри он минус один сделал чтобы я здесь потом этот ну Увидел что Она завершилась
Михаил Непряхин: ну и ничего Не делаю пишу Что я начинаю работать потом сплю Секунду Допустим эта Амуляция как Будто я Иду куда-то По какому-то Апе ну и пешу что завершилась Работа.
Михаил Непряхин: А
Михаил Непряхин: таргнуть ездим
Михаил Непряхин: Вот значит ночам работать втин ноль секунд и сплю потом аа завершил работать если, мне надо их десять.
Михаил Непряхин: В одно, будет
Михаил Непряхин: будет десять. Собственно энтони Одновременно
Михаил Непряхин: индийцы запустились начали. У себя спать на секунду все поспали и потом все завершились
Михаил Непряхин: вот
Михаил Непряхин: дальше когда у нас таки есть входные данные когда мы хотим, что-то этим грузиям передать тогда используется такой паттерн
Михаил Непряхин: ну вокеры Я тут назвал По порядку и би-би-си и просто для того чтобы они тут У Меня все в одном спейсе чтобы идеюшка как Раз, меня подчеркивала так чтобы не было вот Поэтому и знала тут би
Михаил Непряхин: так ну создаем Мы таки этот канал
Михаил Непряхин: в которой Мы будем Писать
Михаил Непряхин: ин ну все даже дело не буффризированные вы можете буферазированное дело без разницы
Михаил Непряхин: а обычно не буффризированные Делают когда они хотят чтобы при падении приложения что-то потерялось потому что здесь ничего Не хранится и в один момент времени Вы обрабатываете только какое-то однозначение потому что если, Вы сделаете не знаю. Там десять. Тысяч
Михаил Непряхин: вот так вот и если Вдруг у вас инстанция упадет то там же в буфере будут вот эти десять тысяч Раз,
Михаил Непряхин: вот то делает просто не буффризированный там по скорости он чуть-чуть медленнее получается но не критично
Михаил Непряхин: вы группа понятно как без нее мы ж потом должны подождать ээ узнать что мы завершили работу
Михаил Непряхин: вот э ну Понятно, это наш хвеейн групп эт
Михаил Непряхин: ну ведь я здесь даже не в цикли Делают потому что, одну грудью только запускаю если, бы тут, надо было ну и запустить
Михаил Непряхин: много грутин я бы сделал цикл, фор
Михаил Непряхин: вот и то же самое пробрасывая внутрь в европу
Михаил Непряхин: Маркер запустился дальше я в него пишу привет
Михаил Непряхин: ну и все дальше я не иду пока он не будет прочитан он здесь будет прочитан потом я напишу как, дела
Михаил Непряхин: он опять, прочитается и потом напишу пока
Михаил Непряхин: вот а что он тут, вообще Делает маркер
Михаил Непряхин: ну. Понятно дело то же самое Выт группу он минус один Делает уж и данн видите это То Эд минус Один
Михаил Непряхин: чучечку
Михаил Непряхин: грэйнджеры читаю этот Входящий канал я его действительно противизировал, только на Чтение То есть если вдруг Мы здесь захотим что-то записать в канал
Михаил Непряхин: о ну Не скомпелируется код потому что Мы протизировали только на чтение а я тут пишу вот если, бы Не было Эти пизацы знаете Раз Я могу записать Но
Михаил Непряхин: У Меня здесь Идея уоркера в Том что Воркер только Пишет ой только читает из этого канала Поэтому чтобы не Совершить ошибку и разрешили защиты от Дурака тут Можно сделать штуку типизацию Это кстати очень классная Фича
Михаил Непряхин: Прям Вот Рекомендую ей пользоваться потому что многие Не пользуются потому что ну как Бы и без нее работает Но Это дополнительная Строгость. То есть Ммм более Строгая этипизация получается,
Михаил Непряхин: Вот Читаем Мы этот Наш канал и
Михаил Непряхин: куда-нибудь записываем ну я Не знаю Или в кафку Мы записываем что-нибудь такое вот
Михаил Непряхин: потом когда
Михаил Непряхин: канал ин Закроется мы из Этой Цепо Фор выйдем
Михаил Непряхин: напишем шоу картина, завершила работу
Михаил Непряхин: то есть ведь, нужно канал закрыть так где мы канал закрываем
Михаил Непряхин: вот мы записали все в канал потом канал закрыли
Михаил Непряхин: соответственно вот из этого цикла формы из бутины выйдем
Михаил Непряхин: ну и выйдем из уборки и завершим вот Эту вот грурутину дальше у нас здесь счетчик, разблокируется и мы напишем что Программа завершена
Михаил Непряхин: вот смотрите Мы тут каждую секунду спим привет как дела пока вот
Михаил Непряхин: аа, и буртин завершила работу
Михаил Непряхин: так а если Мы сделаем буфлизацию мать
Михаил Непряхин: Мы сразу это все запишем и сразу закроем каналы будем! Ждать! То есть у нас э увы
Михаил Непряхин: у нас видите вот здесь пока мы все прочитали и гурутина завершила работу
Михаил Непряхин: а ну у меня здесь нету никакого сообщения да да Мы здесь разницы Не, увидим вот То, же самое
Михаил Непряхин: да то же самое
Михаил Непряхин: вот но ведет оно как бы
Михаил Непряхин: себя страну по Разному
Михаил Непряхин: то есть когда вот У нас Есть буферизация Мы все бамбам-быстро записали закрыли ждем
Михаил Непряхин: а когда бухризации нет
Михаил Непряхин: Мы записали
Михаил Непряхин: ждем
Михаил Непряхин: пока не прочитают здесь здесь прочитали
Михаил Непряхин: мысли снова записали Там пять прочитали и снова записали там опять прочитали мы закрыли канал ждем То есть вот этот способ, он такое более
Михаил Непряхин: Кот получается.
Михаил Непряхин: Ну конечно даже не надо как, Это объяснить более Синхронно Что ли как-то получается. Что как Бы Мы Не теряем Никакие сообщения вот прямо одно вот этот Сейчас в работе, Вот пока привет не прочитали с той стороны
Михаил Непряхин: Мы как дела не шлем потому что а вдруг ошибка нам. Руку Там привет не будет прочитано зачем нам типа Это на М-м новое Засывать То Есть Это как бы такой
Михаил Непряхин: можно сказать конит То Есть когда вот он был это сообщение, прочитано с той стороны Мы такие ага закомители типа Там, оно было прочитано доставлено отправляем следующее
Михаил Непряхин: вот эээ вот эти вот небуфлизированные каналы народ не любит потому что с ними работа чуть сложнее
Михаил Непряхин: и
Михаил Непряхин: ну и
Михаил Непряхин: значит другой патруль когда у нас есть и входящие и выходящие данные и выходящие данные Мы хотим? Отслеживать читать
Михаил Непряхин: значит
Михаил Непряхин: вот смотрите
Михаил Непряхин: сразу, Создаем канал на Чтение, то есть
Михаил Непряхин: выходящий канал Ну Резал ты типа резонанс можно Еще назвать вам было
Михаил Непряхин: сразу, Пускаем гутину и Читаем этот канал ну естественно пока, в Него никто ничего не пишет Мы здесь просто будем ждать Пока Там кто-то появится
Михаил Непряхин: дальше дальше То же, самое как к предыдущему паттернию. Мы создаем канал на Запись лет группа Здесь Тоже, Все то же самое только Мы Воркер передаем сразу и Канал и на Чтение и на запись
Михаил Непряхин: пишем также Сообщения Канал Тоже, непухаризированный так что они тут по одному будет бомба памяти потом закрываем кана на чтение Ждем Пока сигрутины закончатся, закрываем Канал на запись
Михаил Непряхин: и вот эта гортина закончится потому что видите она вот здесь когда вот мы закроем кона аут ну вот из этих крути не будем то есть, Если, мы здесь не закроем канал вот Так вот
Михаил Непряхин: то эта грутина потечет потому что, она не будет Закрыта
Михаил Непряхин: а ну и все дальше Пишут Прямо завершена
Михаил Непряхин: и здесь смотрите Ворка как устроена значит У нас типизированный канал на Чтение
Михаил Непряхин: типазированный канал на запись ну вы группа понятна только для того чтобы ее потом отпустить
Михаил Непряхин: вот и читаем читаем канал на Чтение значит получаем сообщения
Михаил Непряхин: ну Там как-то их обработали куда-то послали получили ответ как будто театр то же самое что получил. На чтение записывая в результирующий канал ну как будто бы это было ну вот я добавляю что обработано да ждем секунду
Михаил Непряхин: и пока у нас канал ин не закрыт мы ее читаем читаем читаем Потом, его закрывают и Мы выходим Из этого цикла говорим что бурутина завершена ну и все уже дальше
Михаил Непряхин: вот и
Михаил Непряхин: ну да в общем-то работает предсказуемым образом
Михаил Непряхин: короче говоря таким образом вы можете так видеть кода для такой и сложной программы все равно немного
Михаил Непряхин: и по Большому Счету Это, очень близко к Продакшн-конду и
Михаил Непряхин: ну на собеседник также Просят написать Пуворкеров да ну вот это есть Пунктыров но только
Михаил Непряхин: с разницей, в том что вот здесь будет цикл форд спрос На гулять сюда церковь
Михаил Непряхин: ну и Сколько Хотите, вы этихворкера запустить десять Хотите, запустить делать вот так вот и внутри оказывается, вот это Что, тут, и было вот и тогда у вас получается в десяти экземплярах но вот это все
Михаил Непряхин: То есть ну тут смысла Нет потому что у меня три Сообщения только было послано да но я в десяти го рутинах это обработал как видеть ничего не поменялось потому что у меня
Михаил Непряхин: а синхронно как бы здесь я По очереди пишу вернее ну у меня канал непуфелязированный вот вот если я Сейчас сделаю буфер да
Михаил Непряхин: этого три хотя бы вот Сейчас у меня здесь будет разнобой вот Сейчас я не получу здесь провет, как Дела пока Нет пока
Михаил Непряхин: короче разнобой получился.
Михаил Непряхин: Нету вот этого Вон тут вообще по-разному, Получилось
Михаил Непряхин: вот а если, я хочу вот этот порядок даже во множестве грутин то я его просто делаю Не буффризированной
Михаил Непряхин: и все
Михаил Непряхин: и таким образом
Михаил Непряхин: а и
Михаил Непряхин: ну Кстати. Нет здесь
Михаил Непряхин: Ты когда у меня много грутин
Михаил Непряхин: Порядка Несоного Порядка здесь Не. Будет У меня десять Куртин читают Канал как Только Одна грутина Прочитала я Сразу. Следующую Пишу о нас провода тут короче
Михаил Непряхин: так и
Михаил Непряхин: как бы порядок он вообще не про бурутины не про каналы если вы хотите, какую-то строгость то это только синхронно делается вот даже даже не бухаризированные каналы все равно это не дают
Михаил Непряхин: вот
Михаил Непряхин: Так и последний вариант. Когда вы только хотите, получать результаты из бурутин и ну там они сами. Откуда-то миру данные им выходные данные Не нужны ну просто Нет вот этого ин-канала да у вас только Аут антипизирован на Запись и вы в цикле
Михаил Непряхин: Пишете Что тут я пишу в Канал привет как дела Пока
Михаил Непряхин: с секундной задержкой
Михаил Непряхин: а здесь я в грутине читаю их
Михаил Непряхин: один, вор я только запускается дальше Жду дальше закрываю канал и выхожу
Михаил Непряхин: вот здесь Тоже, порядок есть Но если здесь будет пуворкеров то порядка Тоже не Будет
Михаил Непряхин: а ну он Же там каждый имеет Да тут немножко по-другому он Же тут каждый воркер Внутри это захороткожи иногда Поэтому тут
Михаил Непряхин: тут порядок Получилось
Михаил Непряхин: в общем смотрите это вот как Раз, такие Примеры минимальные которые чисто на поиграться попробуйте запускайте
Михаил Непряхин: сперва без Пулаворки рождал. Так вот в одной рутинник как он себя ведет потом добавляйте в Это Место, полуоркеров
Михаил Непряхин: а ну то есть вот этот мотоцикл, добавлять
Михаил Непряхин: ну или можно здесь сразу было добавить издец квасаднеркой
Михаил Непряхин: да а потом уже
Михаил Непряхин: менять его
Михаил Непряхин: вот и
Михаил Непряхин: в Принципе как бы, Если вы с этим разберетесь То вы уже чего угодно плюс минус напишите
Михаил Непряхин: Потому что.
Михаил Непряхин: Нет смысла изучать какие То там цепочки
Михаил Непряхин: какие-то пайпланы То Есть Нет смысла попланы выстраивать функциональном стиле потому что вы его и в Обычном процедурном стиле типа и Плане легко выставите ну в чем идея вот смотрите когда У вас есть канал на чте на запись ну вернее который вы
Михаил Непряхин: результаты когда вы читаете и есть, входящий каждый есть исходящий изгородин канала исходящий то в Принципе вы очень легко, эту цепочку. Выстраиваете вы просто ну
Михаил Непряхин: те данные которые получили вы их также можете писать в следующий Канал Или сразу, вот этот Канал может вот здесь вот сразу, порождать тоже, Там еще десять грутин Которые будут тоже там писать и
Михаил Непряхин: тот Канал который результатирующий, дальше можно будет записать короче говоря можно Выстроить какой-то и
Михаил Непряхин: вот Давайте Вопросы, вот здесь вот по этим патронам,
Михаил Непряхин: есть или все понятно, пока
Михаил Непряхин: так если, запись канавудет ли не ровно то она будет происходить сразу после чтения в бурутине или после завершения работы с гордина так Сейчас есть ли запись в канал идете н рона
Михаил Непряхин: так Окей из одной группы.
dmitriy: Да
dmitriy: да проще да у вас просто в примере вот как Раз, здесь идет, привет как дела пока а вот Вмойне
dmitriy: и это все Читается в гурутинах вот Мы получается, Доходим до ин это Передается
dmitriy: Чтение, грутина
dmitriy: вот и дальше после того как Внутри Грутина это прочиталось сразу передается
dmitriy: в функцию мейн дальше обработка той запись.
Михаил Непряхин: Да сразу сразу ну и как не то Что функциями короче если, вот два канала вот У нас выход вход да он получается,
Михаил Непряхин: м допустим мы говорим вот записали вин привет
Михаил Непряхин: он здесь его прочитал
Михаил Непряхин: записал сразу в аут
Михаил Непряхин: вот здесь ваут он сразу появился, и сразу записался или в другом вопрос.
dmitriy: Ну вот я Имею в виду что вот как Раз, внутри Самой грутины а там же идет, Чтение, какое-то
dmitriy: ну вот Например, здесь.
Михаил Непряхин: Так.
dmitriy: Там и дальше у нас освободился канал и после его освобождения сразу же. Предается операция в мэйн
dmitriy: он сразу же. Был.
Михаил Непряхин: Да сразу же короче да-да-да вот ээ вот как только он Прочитал здесь ну если буфера нет Мы говорим? Про кейска до буфера нет вот теперь, он как только прочитал вот в это вот переменное значение записалось
Михаил Непряхин: здесь сразу разблокировались мы здесь и сразу же записали еще одно, и заблокировались, и Ждем пока будем здесь прочитаны.
dmitriy: М Понял. Спасибо.
Михаил Непряхин: Оно Реально короче
Михаил Непряхин: ду Ты де баггер Даже вот есть как, дебагер в Гошке
Михаил Непряхин: но он не показывает короче говоря
Михаил Непряхин: Как себя грузины ведут Как тут блин сделать-то
Михаил Непряхин: ага вот вода
Михаил Непряхин: вот короче говоря тут проблема в том что
Михаил Непряхин: ну а
Михаил Непряхин: джаз
Михаил Непряхин: ой
Михаил Непряхин: Нет и бакером пользуясь Редко потому. Что он не показывая вместе с грузинами Мы Хотим? Чем тобажить
Михаил Непряхин: он не показывает как бы
Михаил Непряхин: он не может показать это синхронном виде потому, что у нас несколько же грутин
Михаил Непряхин: и Поэтому ну и вот мы в основной грутине
Михаил Непряхин: вот мы дошли до этого места у, нас к этому, моменту есть канал аут вот видите структуру канала Она насколько Всякая фигня
Михаил Непряхин: есть канал ин воен группа
Михаил Непряхин: и дальше когда Мы Так какой следующий шаг степ Повер степинтон нотариус, Так степойер Мы идем Запускаем грутину
Михаил Непряхин: и
Михаил Непряхин: Так Сейчас. Увидим Мы здесь огорченно запустилось или Нет
Михаил Непряхин: так ну вот здесь Мы да Мы даже Не Видим
Михаил Непряхин: витя вот У нас Запущенная
Михаил Непряхин: Запущены, еще какие-то грутины
Михаил Непряхин: ивод мэр
Михаил Непряхин: как дураки джаз
Михаил Непряхин: должны искать в какой Там грутине, у нас вот это вот происходит и все равно не попали в нее и даже если. Допустим мы можем в этом месте посмотреть то. Есть как бы это уже другой Кот тоже можем запустить ее и мы конечно увидим это место,
Михаил Непряхин: а уже в другой грутине а ну вот вот мы видим это в бурутине у нас есть бурутина мэйн, и вот в грутине Мейн эту перемены тоже не Видим то Есть он как бы не показывает переменная ни другую грутины и мы Видим Только ситуацию в тот момент когда мы здесь в бутине
Михаил Непряхин: вот Поэтому вот этот дебагер он такой не очень помогает разбраться в работе, бутин если, какой синхронный то конечно да вы это увидите какой то сложный алгоритм
Михаил Непряхин: а если это вот именно надо Понять как работают бурутины и тут приходится обкладываться этими фроннтменами
Михаил Непряхин: ну прямо Критически Важно вот все-таки разобраться вот с этими вот прыжками когда канал буфализированный вот как я сказал что вот мы вот здесь Мы замерли типа как это понять да типа вы просто делаете вот там хмте давайте,
Михаил Непряхин: на и
Михаил Непряхин: после привет
Михаил Непряхин: дуа
Михаил Непряхин: вот вот допустим как понять то, Что, я только Что, говорил значит вот мы здесь Давайте напечатаем
Михаил Непряхин: ну так
Михаил Непряхин: ну в Принципе здесь есть да мы тут увидим привет
Михаил Непряхин: то есть Что Мы ожидаем Что до того как Мы увидели привет ключ Мы Сперва видим до привет Потом увидим им. Привет
Михаил Непряхин: и потом мы видим после привет
Михаил Непряхин: и как-то так приходится
Михаил Непряхин: до привет ин привет
Михаил Непряхин: после привет
Михаил Непряхин: видите ваут еще успела записаться даже то есть вот этот вот аут он так быстро, прочитал что он даже успел быстрее сработать чем после привет там потому что оптимизация есть короче говоря
Михаил Непряхин: вот это вот
Михаил Непряхин: гурутина кого, вернее вывод здесь когда мы пишем это сообщение в аут
Михаил Непряхин: мы его пишем прямо Напрямую, сюда и он очень быстро его получает как бы мы по сути напрямую. Пишем чуть ли не в эту переменную, и Поэтому мы ее успели даже напечатать и
Михаил Непряхин: чем увидеть после привет
Михаил Непряхин: вот ну как видите вот это вот до привет потом мы прочитали вин и только сработало после привет То, есть Мы записали
Михаил Непряхин: вот вот здесь оказались
Михаил Непряхин: и Можем теперь записать как дела
Михаил Непряхин: а вот
Михаил Непряхин: здесь никак по-другому лучше ничего не объяснить потому Что оно тепло вот все надо руками трогать
Михаил Непряхин: текк
Михаил Непряхин: да вот прямо вот эти я вам Примеры это уже как бы эволюционно вот прямо минимально необходим набор против с чем надо разобраться,
Михаил Непряхин: вот с этими, вот четырьмя вариантами,
Михаил Непряхин: и еще в них внутри
Михаил Непряхин: а вот здесь вот добавлять цикл фор
Михаил Непряхин: и играться с Буферизацией канала то есть вот уина аут и наин может играться ей добавлять
Михаил Непряхин: аа буфер один буферновали три и буфер давай
Михаил Непряхин: и как-то Там для себя придумаете вот эти принтеры все можете у меня убрать какие есть и просто
Михаил Непряхин: допустим циферка вы прямо, делаете Мы допустим у вас задача вот здесь у Меня всего лишь три Примера, да то Есть Я всего лишь три сообщения пишу в привет как дела пока
Михаил Непряхин: прямо, убираете все мои принтеры
Михаил Непряхин: и делаете свои принты войны по цифрам типа
Михаил Непряхин: вам нужно просто Вывезти от одного до десяти например, вот расставьте по коду
Михаил Непряхин: а принтеры с цифрами от одного до десяти
Михаил Непряхин: и угадайте так чтобы оно вывелось подряд
Михаил Непряхин: и прям вот банального праздника, здесь делайте при нтв вот здесь Мы дувы выводим десять. Мы Там, один потом здесь два потом здесь опять три ну и вот так вот
Михаил Непряхин: открыть этот как бы именно порядок если вы
Михаил Непряхин: вы должны именно вот читая код
Михаил Непряхин: эээ
Михаил Непряхин: понимать как он будет прыгать по именно вот как, он себя Будет Вести
Михаил Непряхин: Вите в дебагере Не получится
Михаил Непряхин: плюс надо просто ну, вот как, бы по Строчкам Прямо запомнить Где он прямо. Ждет где он блокируется и То же самое с сектами
Михаил Непряхин: так Давайте Еще Вопросы, здесь есть
Михаил Непряхин: так значит ты
Михаил Непряхин: а Давайте.
Илиас Эззахид: Я Несколько примеров видел паторных инны Наути и Этот и Какой то
Илиас Эззахид: три ченел, вроде бы.
Михаил Непряхин: Ммм.
Илиас Эззахид: И и видел там реализации где используется буфер один
Илиас Эззахид: можете объяснить Почему вот Почему буфера ну, один буфер именно.
Михаил Непряхин: Это ну, например, вот У меня есть
Михаил Непряхин: может Сейчас ее тут, запустит
Михаил Непряхин: Так, Сейчас
Михаил Непряхин: час
Михаил Непряхин: пробу хардин
Михаил Непряхин: есть
Михаил Непряхин: пока
Михаил Непряхин: Так, вот короче здесь Задачка натыкайте повая, с собесом
Михаил Непряхин: и
Михаил Непряхин: вот У меня здесь короче говоря в Цикле фор
Михаил Непряхин: аа витя я временный Канал с результатами и делаю его
Михаил Непряхин: не буффризированным.
Михаил Непряхин: Красивого буфера Нет
Михаил Непряхин: и это ошибка потому что здесь должен быть буфер. Один и зачем Он здесь Нужен и чаще всего зачем бывает буфер, один
Михаил Непряхин: потому что
Михаил Непряхин: если буфера не будет
Михаил Непряхин: то я получается блокируюсь
Михаил Непряхин: и
Михаил Непряхин: Ммм
Михаил Непряхин: ну здесь меня ситуация, что если контекст Первый срабатывает
Михаил Непряхин: то канала никогда не будет Прочитан
Михаил Непряхин: ааа если бы и эта Грутина она
Михаил Непряхин: течет начинаетсячка
Михаил Непряхин: а если бы буфер, был один то Я бы из нее вышел Блин только уж слишком сложно ванна Давайте потом пример сделаю нормальный потому Что тут надо чаще всего буфер один
Михаил Непряхин: делают там где канал не закрывается
Михаил Непряхин: но должен быть как бы вот именно, получен один результат
Михаил Непряхин: но это не очень удобно и Это только но там где По-другому нельзя Так Делают а где можно закрыть Канал Всегда, Канал закрывают вы Же, когда вы к нам закрываете,
Михаил Непряхин: все как Бы у вас Нет Проблем? Вы и
Михаил Непряхин: как же тут так просто Не ответить на этот вопрос Извините.
Илиас Эззахид: Ну невыгоднее тогда делать несколько буферов ну там три как минимум это не будет быстрее чем один буфер.
Михаил Непряхин: Ммм да не
Михаил Непряхин: как бы там
Михаил Непряхин: когда вы с каналами работаете вы и так очень медленно работаете скажем так Поэтому от того что это будет один буфер. Там или Не один
Михаил Непряхин: вы особо Не выиграете то Есть Вот Именно как Кот будет работать он не будет работать быстрее если будешь работать больше это просто вопрос в том что например вы Хотите. Бочами работать Или Нет потому что если у вас допустим ипочами работаете вы
Михаил Непряхин: из кафки прочитали допустим десять сообщений а кафка любит плечами работать поместили все эти десять сообщений, в канал
Михаил Непряхин: и пошли, за следующую десятью
Михаил Непряхин: как, бы вы не ждете пока там по одному кто здесь канал будет читать вы просто раза следующей пачкой пошли и вот для этого буфер-то Нужен то есть там где вы прямо вот сетью, работаете и работаете бочами вот эта вот бухризация У канала большая она дает Профит но с точки зрения выполнения кода
Михаил Непряхин: Там все все Одинаково медленно работает
Михаил Непряхин: ну с одной стороны и быстро достаточно. Быстро Но там когда Вы Из кномами работаете там какой-то Скорости
Михаил Непряхин: Все равно речь не идет, ну Там Там уголки Внутри Да То есть канал Это все медленно То Есть Это примерно То же самое когда Мы про мирдекс говорил что как бы да мюзикл, он дает вам вот Эту возможность
Михаил Непряхин: Писать Но в канавах плюс-минус под капотом Один, Фиг То Же самое То есть когда У вас много Грузин Запущено а если у вас Пишущие бутины
Михаил Непряхин: то они будут тормозить а если у вас
Михаил Непряхин: только одна грутина Допустим Пишет
Михаил Непряхин: он
Михаил Непряхин: ну вам неудачный, пример ну короче вот
Михаил Непряхин: может буфер один, Нужен для Не, жесткой синдронизации
Михаил Непряхин: э да смотрите Там вот
Михаил Непряхин: и вы с этим как бы вы более-менее до конца с ним разберетесь если будете писать в Библиотеке вот например, какой нибудь кролик рябитымклувод и я с Этим плотно работал много Потому что Я писал Сперва парсеры
Михаил Непряхин: и в парсерах Там ну Понятно Там нужна ну Там пулыворкеров при Этом не Так сложно
Михаил Непряхин: а самый топ это когда вы пишете библиотеки для работы с кафкой с рэбитом с пастбирой, Там. Чего-нибудь многопоточное Или ты да вот вы с Этим хорошо разбираетесь а так даже на словах как бы не объяснишь потому что, там такие очень хитрые патроны используются
Михаил Непряхин: и
Михаил Непряхин: ну как бы для Начала вот как бы, надо Хотя бы, научиться работать с вова с полом воркеров Если вы вот это вот освоите, вы Если Без любой пройдете и для себя Чего угодно напишите
Михаил Непряхин: следующий этап это уже библиотеки когда вы будете писать библиотечный? Код
Михаил Непряхин: то вы все равно будете Смотреть как другие используют буртинные каналы в библиотеках,
Михаил Непряхин: и там из этого выжимают максимум и там используются разные трюки хаки которые в реальной жизни в продуктовом коде Никогда вы, не будете писать может Это слишком сложно любой коллега кто залезет в этот продуктовый Код и сделает в нем изменение сразу же все сломает
Михаил Непряхин: и Поэтому как бы, закладываться на Это ну Не приходится в продуктовом кодексе, вот надо вот прям максимально в лоб прямолинейное чего-то очень простое если начинаете что-то усложнять там вот То ну как бы
Михаил Непряхин: оно очень хрупкое становится
Михаил Непряхин: а ведь вдруг Всегда по ссылке придет в воротины а когда Он крупные посылки производится на каких лицах Можно Подходить
Михаил Непряхин: Да Всегда по указателю Ваньку передается потому что видите что у Него внутри вы просто Скопируете Это, все и Это, работать не Будет как и с мютоксом То есть с митоксом Мы Работаем по указателю в грутинах и своей группой тоже по указателю
Михаил Непряхин: Поэтому вариантов
Михаил Непряхин: и работать своей группой ни, по указателю вообще Нет только по указателю
Михаил Непряхин: ну, не по указателю если вы до этого не видели примеры когда своей группой работают вот так вот
Михаил Непряхин: а здесь вот вы групп делай да ну там помню да
Михаил Непряхин: То и
Михаил Непряхин: Это все равно указатель потому Что. Мы и
Михаил Непряхин: говоря Могут Поблизи ссылки был да Я Подказ вчера Слушал с Этим Кутузова с
Михаил Непряхин: Тем кто пишет с разработчиком в джей бренте он вообще говорит ссылки и как бы
Михаил Непряхин: ну короче Говоря я бы все-таки Не назывался Своими Указателями и Не путался в них все-таки
Михаил Непряхин: правильнее
Михаил Непряхин: ну Указателями и
Михаил Непряхин: аа если, вы столкнетесь то Пунктир У воркеров Решит вашу задачу
Михаил Непряхин: так Давайте отдохнем Пять минут и еще еще еще поговорим немножко, про Бургеров есть еще интересные особенности
Михаил Непряхин: да в общем да Две, да и две минуты отдохнул
Михаил Непряхин: да когда пишем буфер один мы не блокируемся когда что-то пишем в канал да верно а когда без блокиру ну я смотрите когда буфер один
Михаил Непряхин: это значит мы не блокируемся если у нас одно, сообщение мы Два запишем но когда мы второе захотим писать мы заблокируемся
Михаил Непряхин: то есть как бы
Михаил Непряхин: канал с буфером
Михаил Непряхин: он начинает вести себя как канал без буфера когда он полностью заполнен
Михаил Непряхин: Поэтому как бы если вы Хотите, одно сообщение записать и не блокироваться
Михаил Непряхин: тогда вы можете сделать буфер, один но вы одно сообщение записали пошли дальше
Михаил Непряхин: а если буфера не будет вы Одно, сообщение записали и тут же и заблокировались и пока вот с Той стороны не прочитали вы дальше не пойдете он в этом Разница то есть буфер он позволяет, записать сколько то не блокируясь идти дальше
Михаил Непряхин: мы грути не пишем канал и получаем панику
Михаил Непряхин: канал закрывается нормально
Михаил Непряхин: так в картине пишем в канал получаем панику к нам, за космосом Не освоить если, Мы
Михаил Непряхин: а во Первых можете Не париться о закрытии каналов
Михаил Непряхин: Там сборка мусора соберет если канал не будет пользоваться сборщик его соберет
Михаил Непряхин: канал
Михаил Непряхин: а насчет паники в грутине пишем канал и получаем панику
Михаил Непряхин: она закроется на мою,
Михаил Непряхин: она вообще ни при чем ну получили в врутине панику
Михаил Непряхин: канал кто там своей жизни Живет
Михаил Непряхин: допустим вы поймали там панику
Михаил Непряхин: выше ну чтобы приложение вообще не размоталось не закрылось если вы панику словили хоть, в одной рутине
Михаил Непряхин: вам надо эту панику отловить если, вы не поймаете, то вы закроете, приложение
Михаил Непряхин: допустим вы отловили
Михаил Непряхин: канал вообще никак не пострадал можете дальше работать с этим каналом как бы паники в гурутинах
Михаил Непряхин: живут своей жизнью а канал к этому никакого отношения не имеют, то есть
Михаил Непряхин: с каналом бойся на маме
Михаил Непряхин: так.
Михаил Непряхин: Когда Можно не закрывать канал
Михаил Непряхин: вы же можете не закрывать канал если этого нет в этом надобности вы можете как будто это клоуз это как Бы ну похоже когда Мы Ресурсы. Закрываем но в случае с каналом это только для того. Чтобы вот я здесь его закрываю Ради чего-то зачем я его здесь закрываю
Михаил Непряхин: ну чтобы из этого цикла Фор выйти и все то есть как бы я его я зачем-то его закрываю если, я его не закрою и просто пойду дальше
Михаил Непряхин: и этот канал не будет использоваться его сборщи мусора соберет и все нормально будет то есть как бы
Михаил Непряхин: закрывать канал не обязательно
Михаил Непряхин: это не какой-то ресурс типа сеть который нам. Нельзя закрывать
Михаил Непряхин: та значит вот интересненький еще примерчик, здесь значит на один экран кстати у вас
Михаил Непряхин: все есть и войнупы
Михаил Непряхин: Если, все есть для работы кроме контекста на Контексте потомки
Михаил Непряхин: что Мне мешает смотреть буферзированный канал двадцать то есть у нас там двадцать значение может поместиться Прежде чем мы начнем блокироваться
Михаил Непряхин: на запись
Михаил Непряхин: аа новая группа без нее никак значит сразу добавляем в воен группу десять потому что был он использовал десять поркеров
Михаил Непряхин: Аа ну-ка ведь, Я вам просто показываю пример можно вот так сделать а можно вот здесь вот по одной добавлять
Михаил Непряхин: вот он как хотите, так и делать,
Михаил Непряхин: то же самое Год
Михаил Непряхин: вот значит запускаем цикл фор десятьтераций, десять, Раз, добавляем в игру Пущечек
Михаил Непряхин: ну чтоб потом
Михаил Непряхин: отпустить вот здесь Мы внутри грузин сразу их отпускаем запускаем десять. Грузин
Михаил Непряхин: в каждой грутине
Михаил Непряхин: мы захватываем по указателю вот этот канал
Михаил Непряхин: и каждый из десяти грутин будет его читать
Михаил Непряхин: а потом когда будут получать значение будем, выпечатать
Михаил Непряхин: ну и все это все что, будет делать в рутины
Михаил Непряхин: вот чтобы эти бутины все закончились видите вот я здесь закрываю Канал иначе, эти все здесь Не рутинны они Никогда Не Закроются
Михаил Непряхин: Потому что, здесь был бесконечный цикл, бесконечно будет читаться этот Канал
Михаил Непряхин: Так ки отправляю в канал
Михаил Непряхин: двадцать значений
Михаил Непряхин: ну тут, получается, с нуля начинается от наряды девятнадцати я туда. Отправляю пишу в этот канал
Михаил Непряхин: а Раз, он буффризированный то я быстро, и все записал бам бам бам бам записал канал закрыл,
Михаил Непряхин: жду то есть как бы если смотреть как Кот будет выполняться
Михаил Непряхин: создали канал создали воен группу,
Михаил Непряхин: десять грутин создали но они не запустится. То есть, вот как бы пока что вот мы вот здесь окажемся ничего не запустится. Никакие грутины не запустятся, они просто поставятся, в очередь они даже не успеют Заработать
Михаил Непряхин: потом мы двадцать значений в канал записываем даже здесь эти гурутины до сих пор могут не начать работать.
Михаил Непряхин: Закрыли канал ждем
Михаил Непряхин: и вот мы ждем запустились эти десять, гурутин
Михаил Непряхин: а так как у нас буферизация двадцать ну типа по Два значения каждая Грутина успеет вычитать
Михаил Непряхин: и все значит и распечатываем их
Михаил Непряхин: Варваг сингвин групп вггуу используется связь Один двадцать пять используется у меня, здесь версия Один двадцать четыре
Михаил Непряхин: а здесь еще Нет такого
Михаил Непряхин: нити нету, у меня, нету здесь гол
Михаил Непряхин: Еще Еще Не, Завезли в один Двадцать пять да Можно сделать вггу но в общем То там Ну все равно надо понимать как это под капотом работать ты как бы в явном виде
Михаил Непряхин: короче там верь один двадцать пять вот это Можно Не писать
Михаил Непряхин: это Можно Не Писать и дан Можно Не Писать Это, под капотом будет Сделано Там с помощью синтаксиса Вот Этого Нового вг Точку гол,
Михаил Непряхин: М Так но все равно Еще Пока все сидят на Один Двадцать четыре
Михаил Непряхин: Не Перешлишь
Михаил Непряхин: Причем Бесконечный Цикл
Михаил Непряхин: где Бесконечный Цикл где Нет бесконечного, цикла
Михаил Непряхин: это конечно цикл, паранджу Просто терроризм по Каналу.
Илиас Эззахид: Нет вы сказали что Если, вы Не ставили бы клоуз эту
Илиас Эззахид: бесконечно выкрутилось.
Михаил Непряхин: Ну вернее не крутилась бы бесконечно а зависла бы навсегда вот так неправильно выразился
Михаил Непряхин: просто мы бы здесь навсегда заблокировались да цикл, не Бесконечный но мы заблокировались, бы Здесь навсегда если, бы я не закрыл,
Михаил Непряхин: аа вот значит и самый, большой сюрприз когда мы Это дело запускаем
Михаил Непряхин: то оно Кстати,
Михаил Непряхин: Это вообще то
Михаил Непряхин: а ну вот да
Михаил Непряхин: вот значит смотрите какая интересная штука
Михаил Непряхин: мы запустили Десять, вокеров
Михаил Непряхин: Но первый воркер
Михаил Непряхин: у нас работал ну вот он половина вычитал
Михаил Непряхин: а потом разнобой пошел потом девятый уборки разработал второй третий четвертый пятый шестой седьмой восьмой нулевой
Михаил Непряхин: блин
Михаил Непряхин: почему то есть мы в живот, хотим, какую то параллельность нормальную почему у нас по сути работал только один воркер а все остальные по одному значению только здесь вот получили
Михаил Непряхин: и ты в самом начале
Михаил Непряхин: потому что у нас
Михаил Непряхин: несмотря на то что даже гомакс-прокс видите он
Михаил Непряхин: Не один да Их много все равно какая то Гурутина запустилась первой
Михаил Непряхин: и в моем случае запустилась первый вот Это первый уоркер
Михаил Непряхин: но на самом деле первый оркестр он был нулевой это как бы второй бургер и он короче говоря основную работу сделал а все остальное просто как бы не успело даже запуститься
Михаил Непряхин: ну потому что вот оно все равно вот так вот неравномерно оно Запускается если, мы гомосексуализм даже сделаем
Михаил Непряхин: а здесь вообще никакой вакер ничего Не успел. Запуститься просто Один девятый воркер вот он как Запустился последний и он всю, работу сделал ну вот видите следующий версит учета другие поработали вот я опять, обновил, опять, один девятый воркер
Михаил Непряхин: ну во-первых почему последние, запускаются в первую очередь потому что от оптимизации Есть гоу последняя Запущенная гурутина она первой работает это такая оптимизация
Михаил Непряхин: на собесе тоже Есть такой вопрос типа вот показывают вам Допустим Запускается грутина грутина грутина грутина какая и Что выведет типа Кот так вот Та, грутина которая Последней запустилась она Первая запустится а потом уже все остальные в том порядке к которому были Реально запущены то есть Кроше есть такая оптимизация специальная
Михаил Непряхин: последняя Запущенная гурутина Она первой отрабатывает а потом же все страны.
Михаил Непряхин: Вот и вот этот сказку пример вот последняя запущенная грутина ветер на первый Отрабатывает
Михаил Непряхин: почему потому что
Михаил Непряхин: вот запустилась гурутина
Михаил Непряхин: последняя да и она взяла и просто у меня там буфер двадцать одна его быстренько весь, вычитала бах бабах бабах другие вообще ничего не успели сделать потому, что. Они просто не запустились
Михаил Непряхин: ну допустим вот вызовем искусственный авейт Наш то есть вот этот допустим пример ну никогда в жизни как бы Не Происходилось так делать, но допустим вы Хотите, реальную параллельную какую-то синхронность да умолнайтесь ее нет по Сути косин хроно работает можете прямо сказать давай, делай оейд
Михаил Непряхин: и с авейтом У нас Так и будет вот девятая вот последняя грузия запустилась
Михаил Непряхин: а потом давай, Поработать всем другим и видите как бы они начали передавать работу друг другу
Михаил Непряхин: и реально на Каждую Картину пришлось Вот девятый воркер в Этом девятый год то есть на Каждую грутину примерно По два и
Михаил Непряхин: сообщений Пришлось ну да Что ровно два дня Получилось
Михаил Непряхин: вот Ммм потому что Без овейта оно вот ведет себя
Михаил Непряхин: очень как бы, кто быстро, первый начал работать тот свою работу волю
Михаил Непряхин: ну если не овейт можно Подождать Время и в Принципе Оно
Михаил Непряхин: мало метео. Вот тишина на секунд
Михаил Непряхин: мало
Михаил Непряхин: Так Давайте Скука сделаем
Михаил Непряхин: Так это еще получается Одна Микросекунда Одна микросекунда мало Давайте сделаем
Михаил Непряхин: пятьдесят микросекунд
Михаил Непряхин: о пятьдесят микасекун уже хватило
Михаил Непряхин: то есть короче говоря
Михаил Непряхин: если Мы спим мало то все равно Оно Там как бы Есть оптимизация что Если мы Спим Но мало
Михаил Непряхин: то Мы Не отдаем управления другой Грутине потому что мало Спим
Михаил Непряхин: а вот Если, Мы спим ну вот сколько-то вот уже значительно Не знаю Сколько Там десять. Микро секунд
Михаил Непряхин: ну десять. Месяцев. Он видит Тоже, Не отдает Там есть какое-то значение Пять
Михаил Непряхин: да опять тоже Не отдает ведь аа Один отдает Одна Микросекунда
Михаил Непряхин: Ну Здесь у Меня вообще две гости. Начинают работать то тоже. Такое Странное Поведение вот опять уже Пять уже нормально то Есть Пять уже срабатывают как авейт Реально отдают другим Грутинам но опять же не Всегда ведь его здесь не отдала, потом отдала, вот
Михаил Непряхин: то Есть короче важно понимать что
Михаил Непряхин: и планировщик вот как решит и
Михаил Непряхин: вот Поэтому как бы важно понимать что лучше когда имеете дело с Гаутинами можете Не закладываться Никогда на порядок Но его Не будут Всегда, будут Еще и на разных системах по-разному себя вести
Михаил Непряхин: вот даже если гомок прокс один а уж если оно не один то уж тем более как бы это
Михаил Непряхин: да и
Михаил Непряхин: вот и среди не один вот нулевой два раза поработал
Михаил Непряхин: ну более менее похоже так можно Сейчас отключить
Михаил Непряхин: аа ну половина времени работает все-таки один потом ведь
Михаил Непряхин: по одному а у них там все таки они на тебя успели взять по одному но больше всего работал какой то одинокий,
Михаил Непряхин: так вот это такая вот особенность
Михаил Непряхин: дальше
Михаил Непряхин: да
Михаил Непряхин: так здесь меня паттер На
Михаил Непряхин: дестопом.
Михаил Непряхин: Объяснять не объяснять
Михаил Непряхин: ну ладно. У нас соседний урок получился. Пробуратинные кравы
Михаил Непряхин: короче смотрите что и что Еще важно понимать
Михаил Непряхин: что Есть сигналы значит вы можете сигнализировать грудином
Михаил Непряхин: закройся
Михаил Непряхин: значит как это работает ну вот ну первый вариант с Контекстом конечно же контекст но что под, капотом у контекста в очень простой патру
Михаил Непряхин: а Если, смотрите мы берем и создаем вот у нас основной канал Таски мы здесь читаем вот сделали буфер. Двадцать
Михаил Непряхин: и сигнальный канал еще без Буфера просто с пустой структурой
Михаил Непряхин: просто сигнальный канал Мы По нему будем сигнализировать чтобы картина закрылась
Михаил Непряхин: так дальше ну Здесь Я как Будто бы сервер поднимаю Х дтп и хочу узнать когда он завершится
Михаил Непряхин: а значит дальше запускается Бурутина в грутине в бесконечном цикле фор мы что то делаем
Михаил Непряхин: ну вот пишем мы сорок два в канал да в этот канал просто, пишем сорок два
Михаил Непряхин: но мы Хотим, извне дать сигнал типа закройся все хватит писать сорок два прекрати выходим
Михаил Непряхин: и мы закрываем канал стоп
Михаил Непряхин: когда мы канал стоп закроем то вот этот кризис работает
Михаил Непряхин: и Он конечно Не Сразу сработает потому что Он с Кейси срабатывает в случайном Порядке Даже после того Как канал сто Год Закрыт какое-то Время мы все равно мы Будем Продолжать Вот сюда писать ну как повезет потому что они срабатывают кейсы у нас срабатывают Всегда случайном Порядке
Михаил Непряхин: Поэтому как только мы канал Стоп Закрыли мгновенно мы по Нему не Выйдем есть вероятность что сколько то Раз, мы еще Все таки вот сюда попадем потом Рано Или поздно все равно в этот кей попадем
Михаил Непряхин: и сделаем брейк из циклофор зачем здесь метка потому что Если без метки то Мы будем выходить с селектом брейк ботин селект а это не то Поведение. Которое Мы Хотим? Выйти из цветов фор поэтому здесьметка
Михаил Непряхин: когда мы получим сигнал стоп Выйдем, из цикло фор
Михаил Непряхин: нам мы закрываем вот этот канал сервердан.
Михаил Непряхин: А зачем мы это делаем
Михаил Непряхин: потому что
Михаил Непряхин: Пока этот Канал Не закрыт
Михаил Непряхин: Мы Понимаем Что Мы Работаем ну Представим что-то У нас хотя и по сервер такой
Михаил Непряхин: и Пока сервер Дам не закрыт Мы понимаем что сервер существует он работает он вот это в цикле фокурудица Мы просто здесь в конце смотрите вот Мы читаем из канала сервердан.
Михаил Непряхин: И ну Мы блокируемся здесь да Мы блокируемся до тех Пор пока его вот эта вот грутина здесь не закроет
Михаил Непряхин: и таким образом
Михаил Непряхин: мы смотрите как здесь поступаем
Михаил Непряхин: а ну во-первых У меня есть еще грызть фуфшет даун ну то есть вернее этот патрон По сути Этой грызху уж отдаунда я вам Сейчас показываю как и
Михаил Непряхин: значит вот Мы запустили наше приложение ну вот сервер запустили и какой то там ньюс кейс здесь э У меня да тоже самое у меня здесь
Михаил Непряхин: то есть как бы повторяет этот патруль
Михаил Непряхин: дальше Мы создаем сигнальный канал с бушером один ну так принято создавать я уж не Знаю о чем там буфердинг как же так принято
Михаил Непряхин: ааа
Михаил Непряхин: Мы получаем этот канал передаем его вот этот сигнал ноуттифай и говорим что нас интересуют два типа сигналов это, сигнт и сектором
Михаил Непряхин: это, реальность из колы операционки То есть Они там мапятся. На сигналы Ленксовые
Михаил Непряхин: и сигент это
Михаил Непряхин: сигенты это короче не Помню какое из них что короче Один из них это контраце вот когда контракт в контрольной консоли на за нажимаете
Михаил Непряхин: ну вроде бы это сигнал а сектерм это губернатор посылает сигнал ну какой-то из этих я уже Не помню Какой губернетис о Какой контраце ну короче говоря Что бы У нас Мы Нажали. В контраце У нас сработал какой-то из этих сигналов
Михаил Непряхин: так я его здесь запишу да я здесьжу Давайте Проверим какой срабатывает шанс чтобы Не обмануть вас Вот короче Он пишет Я нажимаю контрал Цен
Михаил Непряхин: анон Стоп короче здесь
Михаил Непряхин: интропт
Михаил Непряхин: интропт Это шос
Михаил Непряхин: добрин
Михаил Непряхин: интеррок Я не помню какой Вы все таки
Михаил Непряхин: нечто
Михаил Непряхин: короче Так и Не Получилось узнать да ну. Один из них консенсус второй От куба посылается Поэтому два и Дальше Мы пишем Какой зимой пришел
Михаил Непряхин: и как только он пришел Мы сразу, закрываем
Михаил Непряхин: этот сигнальный. Канал стоп
Михаил Непряхин: соответственно выходим из этого цикла как только вышли циклы закрываем сервер дан
Михаил Непряхин: а в этом месте Мы понимаем когда Мы здесь Сможем прочитать значит сервер данн закрыт Мы печатаем Сервердан, ну и также с этим патроном там дальше потому, что стоп он Еще и в этом цикле Тоже Задействован так А почему управляющий, канал типа стракт ну короче говоря и
Михаил Непряхин: по памяти да правильное предположение Что по памяти потому Что пустая структура в памяти ничего не занимает как бы ноль но на самом деле по большому счету тут и бум мог Быть
Михаил Непряхин: легко но без разницы на самом деле Ну просто вот в этом случае когда мы Работаем с сигналами сигнальными Вот приняли использовать пустая структура
Михаил Непряхин: и не то что тут памятью много Сэкономим на Этом просто Так принят хорошо
Михаил Непряхин: и и
Михаил Непряхин: и все короче говоря Вот Мы когда Мы прочитали эту Строчку Мы понимаем что сервер наш он все корректно Обработал завершился? И закрылся? И здесь Мы Помним все оружие не Работал
Михаил Непряхин: то же самое здесь Дальше когда Мы здесь Прочитали Мы понимаем значит эта Гурутина вторая типа наша бизнес войка здесь крутилась ну или какая нибудь капка Могла война
Михаил Непряхин: Тоже. Она получила сигнальный сигнал стоп этот цикл, из этого цикла Фор она вышла
Михаил Непряхин: и закрыла вот эту дисккейсдан и вот он из киездан здесь мы тоже, разблокировались, и напечатались, кездан
Михаил Непряхин: и вот
Михаил Непряхин: а в реальной жизни обычно Вместо вот этого сигнального канала используется контекст
Михаил Непряхин: и в этом вся Разница просто контекст еще Там дополнительный какой-то у Него функционал Есть ну и просто принят функции вот этот контекст передавать Но встречаются также Повсеместно и вот этот паттер с Реально обычным каналом
Михаил Непряхин: и Тоже, и
Михаил Непряхин: вот этот паттерн тоже Ммм очень важно понимать потому что когда вы будете потом делать мисс уша даун
Михаил Непряхин: вы тоже этот порядок сможете воссоздать
Михаил Непряхин: чтобы гарантировать то есть смотрите этот паттерн он гарантирует
Михаил Непряхин: порядок
Михаил Непряхин: что сперва я говорю здесь а остановитесь и я то говорю всем то есть я вот этот Сигнальный канал Стоп, как контекст везде разбрасываю ведь он вот здесь вот в кейсе участвует и здесь в кейсе и еще хоть,
Михаил Непряхин: в тысячу бурутин я его передал и когда я сказал клоуз стоп я сказал остановитесь все
Михаил Непряхин: а дальше они же могут долго останавливаться правильно они ж там какую-то работу делали они же кафка она там получила бач его надо обработать а
Михаил Непряхин: там надо закомитить там сервер он же получил, сообщение ему же надо его отдать, им нужно там закрыть коннекшины ну и Так далее То есть у нас в серверах
Михаил Непряхин: все постоянно. Работает и в Процессе обработки чего-то и Это чего-то Мгновенно никогда Не может Закрыться потому что Эти ресурсы надо закрыть Если Мы Возьмем и тут же Выйдем и типа Не будем ни. На чем обращать внимание
Михаил Непряхин: То У нас обязательно будут потери что-то будет Незамечено что-то потеряется
Михаил Непряхин: а что-то повиснет в воздухе какие-то и
Михаил Непряхин: а дальше дожидаемся Что они действительно корректно завершили работу и подали нам то есть мы Им подали сигнал да и они нам подали сигнал
Михаил Непряхин: а что они корректно завершили работу и вот этот вот патер нота называется грейс хуша даун ну в серверах этот апел. Он и так по молчанию реализован
Михаил Непряхин: в кафке. Криво реализован в кафке. Приходится вот это вот делать руками потому что Там Кафка Гручена Крыва написана какими-то очень
Михаил Непряхин: Талантливыми. Людьми Вот ну и иногда бывает его Прям Вот нужно юзать
Михаил Непряхин: А чтобы точно вот понять что все Мы точно завершили и можем идти дальше
Михаил Непряхин: есть вопрос у собеседника данила подольского
Михаил Непряхин: аа и он такой тоже популярный значит его собеседник любит задавать
Михаил Непряхин: значит представьте что У вас Есть грутина
Михаил Непряхин: Я Не
Михаил Непряхин: а которая Пишет
Михаил Непряхин: вот как У нас здесь Дас ведь, У нас Есть грутина
Михаил Непряхин: она пишет
Михаил Непряхин: в Канал вот Что то да этот Канал мы Тут создали он у нас то есть мы мы из этого канала Читаем, а От Грутины пишет
Михаил Непряхин: и смотрите Мы же Не, можем его закрыть вот если Мы Сейчас канал таск, Закроем,
Михаил Непряхин: а эта грутина Будет писать Год паника уж нельзя писать закрытый канал
Михаил Непряхин: а как тогда
Михаил Непряхин: ууу сказать в грутине чтобы она закрылась вот и вы говорите с помощью сигнального канала вы создаете еще один сигнальный, канал передаете вы в эту Картину и в соответствии с селекте его слушаете и когда вы его закрываете, то, грузины закрывается
Михаил Непряхин: и когда вы получили вот этот вот клоуус сервердан если, вам надо Вдруг обязательно закрыть вот этот канал
Михаил Непряхин: здесь вы его сможете сделать ээ вот У Меня здесь кто еще этот пишет да ну короче вот здесь Мы точно знаем Уже в Канаву, никто не пишет
Михаил Непряхин: и если нам. Важно закрыть канал статками вот Здесь вот вот в этом месте мы его безопасно закрываем то есть может опять, же быть такая задача на Собеседование типа вот ну вот прям один в один да что есть Канал в него все пишут
Михаил Непряхин: как его закрыть так чтобы не было паники
Михаил Непряхин: делайте сигнальный канал рассылайте его везде и убеждаетесь еще потом что те кто в него писал они перестали это делать а вы это убеждаетесь Вот с Помощью другого сигнального канала уже от них
Михаил Непряхин: и уже тогда. Вы можете закрыть этот канал таск Точно зная что в Него никто не пишет
Михаил Непряхин: дальше вот этот пример очень, Важно покрутить я вам тут вообще не даю лишнего прямо даю только Примеры Которые новые прямо, в которых в них только надо Разобраться. А дальше в Принципе вы уже Чего, угодно напишите
Михаил Непряхин: та разрешена он принято в Голову. Всегда Делать через канала сигнала
Михаил Непряхин: ну Да Да О Потому Что смотрите вы Же имеете дело. С Грутинами в Серверы Да у вас консерватор у вас везде гурутины ну там в библиотеке с подкапотами и ингурутины как Еще к грутинам сказать Что они должны закрыться в Голод одеваться через Канал
Михаил Непряхин: Ну, через Контекст Делается Да Но
Михаил Непряхин: в Контексте Внутри Канал
Михаил Непряхин: Так Это Же Да конечно Когда-нибудь газированный Канал Открыт
Михаил Непряхин: из него не Читается
Михаил Непряхин: а если закрыт из не начнет читаться
Михаил Непряхин: ну и
Михаил Непряхин: как сказать
Михаил Непряхин: не было не было не было ничего Подобного догошки написано голод и писали ну вот на коленке
Михаил Непряхин: как как умели То есть это Сейчас уже там Можно Еще что-то придумать да и то Там в том же Раз Не То чтобы чего-то придумали
Михаил Непряхин: так что ну Вот так он да надо понимать короче что закрытый Канал он читается
Михаил Непряхин: не закрытые, не читают но странно согласен
Михаил Непряхин: еще один паттер который
Михаил Непряхин: может, пригодиться по жизни
Михаил Непряхин: называется кувото между Падением кодом
Михаил Непряхин: смотрите значит такая ситуация, Есть канал
Михаил Непряхин: буфельзированный на Сто элементов
Михаил Непряхин: Опять же таски
Михаил Непряхин: но это таски
Михаил Непряхин: короче прям Жесткие суперант Тяжелые Жесткие таски
Михаил Непряхин: которая прям Сипию баунти и наше железо Одновременно может переварить Только три таких таски
Михаил Непряхин: как же сделать ограничитель такой рет лимиттер да Что вот Только три таски Одновременно Мы можем. Переварить
Михаил Непряхин: значит Мы Делаем канал
Михаил Непряхин: с Пустыми структурами ну опять же типа это сигнальный канал Мы говорим Что это канал который используется Не По назначению Не как, канал А как, что то сигнальное Связанное
Михаил Непряхин: Вот значит Запускаем десять, грузин
Михаил Непряхин: и и
Михаил Непряхин: А Вот запустить Мы зачем-то хотим, именно, десять грутин понятно, Что мы можем запустить три гурутина и Тогда как Бы все легко, Решается у нас параллель не только три но вот допустим у нас грузин много а мы в этих грутинах хотим, вот ограничения сделать только на три
Михаил Непряхин: ну если, вы синтетический патруль Не спрашиваете почему просто пример
Михаил Непряхин: значит вычитываем эти Таски вот этот Там буфер сто и
Михаил Непряхин: когда Мы вычитали Одну таску
Михаил Непряхин: Мы записываем пустую структуру в этот Канал с квотой
Михаил Непряхин: Этим самым Мы квот Уберем то есть взяли квоту емкость канала уменьшилась на Один.
Михаил Непряхин: То есть емкость уже стала. Два вот Мы ее взяли
Михаил Непряхин: ну дальше работаем Эту трудную работу
Михаил Непряхин: сипию баун какой-то и печатаем после секунды спим печатаем сообщения
Михаил Непряхин: и квоту отпускаем То Есть Мы Читаем Из канала и Таким Образом Отпускаем квоту
Михаил Непряхин: Мы Так Берем
Михаил Непряхин: грань клоун
Михаил Непряхин: Освобождаем квоту
Михаил Непряхин: а Если вдруг Мы Уже взяли три коты Но тревожная сработала и три года взяли
Михаил Непряхин: аа следующая грузия Которая Будет пытаться взять квоту она здесь заблокируется потому Что записать в Канал ничего нельзя
Михаил Непряхин: потому. Что Он заполнен
Михаил Непряхин: в нем Уже записаны три Структуры Пустых Он полностью заполнен и пока кто то не прочитает из канала какая То бурутина
Михаил Непряхин: вот эта грутина записать него не сможет опять же тут как бы такая инверсия вроде и с канавами но вот Таким образом мы берем кого-то Таким отпускаем но Это, как бы такое мышление уже должно быть мышление на каналах оно тут немножко. Особенное
Михаил Непряхин: и этот паттерн как, Раз, используется очень часто в библиотеках и
Михаил Непряхин: и дальше тут в цикле мы получается сто. И
Михаил Непряхин: аа стойте рации делаем пишем Эти, числа в Канал такс
Михаил Непряхин: и спим минуту Мы спим
Михаил Непряхин: зачем Мы спим минуту ну короче Тут Нет и никакого врез ваша дауна
Михаил Непряхин: Чтоб не усложнять вот и видим как он себя ведет вот аведет оно на себя так что оно по три то есть вот у нас квота три вот оно по три выплевывает
Михаил Непряхин: вот буквально недавно он писал какую-то задачу вот тоже, Использовал этотворкер
Михаил Непряхин: и а таким образом по Сути
Михаил Непряхин: у нас есть какой то ход по сервер
Михаил Непряхин: вот вы говорите квота пятьдесят Что типа у вас. Одновременно вы можете принять только пятьдесят запросов
Михаил Непряхин: а и вот на Входе У вас в ручке вы проверяете эту квоту если вы можете ее взять то есть записать в канал пустую структуру
Михаил Непряхин: то вы идете дальше и выполняете эту работу если уже канал заполнен то есть, уже пятьдесят запросов к вам пришло вы их все взяли Никакие запросы Не завершились вы Отдаете статус ну. Вот можно даже Какой то нормальный статус четырнадцать двадцать девятое отдать, тумэнериккрест
Михаил Непряхин: У нас спасибо в россии есть такое
Михаил Непряхин: вот и дальше ну там на той стороне должны делать этот рай
Михаил Непряхин: а вот потом когда работа выполнена в эту комнату отпускаете и все и соответственно у вас
Михаил Непряхин: таким Образом вы Одновременно обрабатываете только пятьдесят вопросов
Михаил Непряхин: вот же пример синтетический ну. Просто чтоб примерно как бы понимать где это можно зарезать
Михаил Непряхин: потому что он очень простой как бы и вот довольно вязательный
Михаил Непряхин: так
Михаил Непряхин: а все смотрите с гурутинами И канавами вот
Михаил Непряхин: вот то что надо посмотреть И
Михаил Непряхин: а какая Разница между квота Симонов падронс
Михаил Непряхин: ну И
Михаил Непряхин: такаягуртина у роу
Михаил Непряхин: можно уже вот так не делать но нормально работает это как бы вот это уже Устаревший синтез так можно не передавать
Михаил Непряхин: просто можно По замыкания делать
Михаил Непряхин: семафор да а потом в дефере отпускаете ну окей назовите ему форму как будет вообще неважно как это называется
Михаил Непряхин: одно, значение
Михаил Непряхин: ну здесь получать симу Фор Намного значения немного и Пустяков.
Михаил Непряхин: И каких-то названий и
Михаил Непряхин: и и
Михаил Непряхин: Вот
Михаил Непряхин: для того чтобы хоть как-то О чем-то говорить можете если вас поймет можете назвать Вместо код и симфонии я Встречал. Когда-то квоты и называли ну прям в ходе
Михаил Непряхин: так давайте Вопросы, еще Есть По
Михаил Непряхин: грутинным Каналам синхронизация вот этим всему то Есть мы пока к этому не будем долго возвращаться, а потом только когда Задачки будем решать еще к этому. Вернемся
Михаил Непряхин: вообще насколько, это сложно и непонятно давайте можете обратно все-таки показать.
Михаил Непряхин: Надо быть кто голосом хочет задать вопрос снова создавать
Михаил Непряхин: на самом деле.
David R: Есть вопросик
David R: слэш размышления когда у нас оштите пенсильвер и мы принимаем Запросы. И мы не хотим, Ничем не Ограничивая принимать Там столько, Сколько сможем у нас запросы получается каждый запрос у нас обрабатывается в отдельной карутине и Мы запускаем ровно только рутину Сколько у нас процессорного Времени
David R: вот когда.
Михаил Непряхин: Даже Не Сколько У нас Процессов Во времени. А вообще прямо. Запустится Прям
Михаил Непряхин: ну Сколько Во-первых У нас ядер условно Сколько там гомок срок задано столько и спустится Одновременно а вот Сколько придет запросов на каждый запрос просто по Бурутине будет запускаться и все и там нет никакого да.
David R: И тут, и тут, вопрос вот если Мы хотим? Использовать процессор вот ровно по его ресурсам не вот если Мы Запустим карутин больше чем процесс сможет переварить они получается у нас будут где-то Там в очереди простаивать а если Мы будем, меньше запускать тогда получается У нас
David R: процессор будет Простаивать вот если какой-нибудь
David R: Аля балансирующий, Какой нибудь инструмент который запускает вот ровно столько карутин Сколько У нас свободных ресурсов вот чтобы его забить там под сто процентов но они больше.
Михаил Непряхин: Нет это только опытным Путем и рейд лимитами деваться То есть.
David R: Это даже больше вопрос не когда мы принимаем запросы а например, мы Хотим? Отдавать запрос и.
Михаил Непряхин: Но вообще дефолт это вот сколько У вас есть, этих ядер процессора ну, То есть, гоумакс-прокс вот У вас сколько есть вы по его количеству и запускаете гурутины например, вот есть у нас работа с посгрей
Михаил Непряхин: а с поздравием работа м
Михаил Непряхин: здесь значит библиотека Пгекс и Мы работаем с пгэкспулом то есть У нас гошки удобно сделали Что не надо даже погасить союз потому Что У нас погребаунтер просто из Коробки в Библиотеке он
Михаил Непряхин: Ну многие Не знают до Сих Пор юз погребаался все равно Вообще как бы если Можно Не юзать то вообще Голову. Это нормально
Михаил Непряхин: работает ну и вот и вот вопрос стоет значит в этом Погабалансе по Этот пул воркеров
Михаил Непряхин: и вопрос вот допустим смотрите по взглядам
Михаил Непряхин: воскрес а у нас пол кворкеров
Михаил Непряхин: так вот
Михаил Непряхин: какое какое значение этому полуворкеров делать а ну простой ответ вот у вас есть два гомок прокс Ну делайте пул. Два
Михаил Непряхин: если У вас десять Ну сделайте пул. На десять потому Что
Михаил Непряхин: чем У вас больше гуртин
Михаил Непряхин: тем они будут больше за ресурсы конкурировать и как я говорил несмотря на то что гурутина это легковесный поток но тем не менее это как бы все равно ведь поток
Михаил Непряхин: как бы
Михаил Непряхин: ну вот я много очень экспериментов делал там в Свое, время просто как бы пытаясь понять? Там понимаете такая Зависимость нелинейная типа вы думаете Что Сейчас я накину бурутин и все будет работать быстрее накидывайте ну работать быстрее Но не во столько Раз, во сколько вы накинули гурутин
Михаил Непряхин: и там постепенно выясняется что и
Михаил Непряхин: и как бы вот
Михаил Непряхин: по сути да.
David R: Ну Тут в сгреб получится если. Запускать пол гомокспрокс если. Если. Грузия ожидает ответа на Секунду, то получается У нас будут работать в Секунду от Века рутина То есть они Запустились Секунду подождали Эти Две Карутины они Завершились и Так тоже получается как-то Не Очень эффективно но если например, Мы отправляем два запроса в двух каруенах
David R: и с той стороны Мы эти Две, Карутины ожидают Там целую Секунду а другие Мы не можем запустить больше.
Михаил Непряхин: Оно Там хитрее, тампу Это именно типа Аналог гоу макпрокса? То Есть вот Сколько Одновременно грутин будет работать только на
Михаил Непряхин: коннекшины распазгрей а реально-то в этих двух грутинах там ну. Там будет много запросов работать То есть как Бы там
Михаил Непряхин: Да там два слоя то есть один это именно коннекшины типа похожие на вагомок Прокса а так-то запросов У вас будет ну сколько вы запросов столкаете стройка Льго То Есть Там Не Будет с Этим Проблем ну Там по-своему может быть Не очень удачный пример тот способ герой потому Что надо знать внутреннее устройство
Михаил Непряхин: Но короче Смысл в том Что с одной стороны Можете Не париться и Всегда просто Поднимать Э гурутину если хотите, что-то параллельно там запустить запускаете бурутину и не паритесь
Михаил Непряхин: а если, вы ну как делает это сервер то сервер просто вот пришел запрос поднял. Грудью и Пришел запрос поднял грутину и все и прям пришло тридцать тысяч Запросов тридцать тысяч грутин Год Поднята
Михаил Непряхин: аа, если уж вы хотите, там прямо, париться за ресурсы но тогда вы делаете полворкеров
Михаил Непряхин: и Просто немножко сложнее получается архитектура что у Вас разгребает это все дело пуворкеров
Михаил Непряхин: но это Правда даже в Гоу По дефолту стандарты так Не сделали
Михаил Непряхин: Поэтому здесь Нет короче Рецепта надо просто пробовать экспериментировать и Ну рисовать графики в Графане
Михаил Непряхин: Ну просто вы провели эксперимент такой такой такой и посмотрели и Что будет лучше
Михаил Непряхин: и тогда вымираете То Есть
Михаил Непряхин: только Так опытным путем
Михаил Непряхин: так
Михаил Непряхин: так Трое я Столкнулся Подумал что так для Меня сложно но поройчеров потыкаться например иногда
Михаил Непряхин: но тема сложная да она видите она Именно что вы пока руками
Михаил Непряхин: вот это вот на то что я вам сказала не протыкайтесь
Михаил Непряхин: э ну даже если, вы руками потыкаетесь вы все равно быстро Сейчас забудете То есть вот чтобы это Прямо отложилось с этим надо поработать на несколько месяцев Прям какую-то задачу решить
Михаил Непряхин: ну вот что я вам предлагаю либо плут пареры писать как банальный какой-то там паук веб паук допустим просто Обходить сайты
Михаил Непряхин: Ну там вы еще Столкнетесь с прогсями Что Там прокси севера надо Будет не знаю. Гугл. Можете поразить ногу Потому Что сами себя не дают партия короче какой-то Парсер Многопоточный и вот с пулом воркером как бы точно разбирайтесь
Михаил Непряхин: а на
Михаил Непряхин: а так надо какие то писать библиотеки
Михаил Непряхин: либо либо например. Написать свой этот
Михаил Непряхин: и очередь сообщений типа брокер месседж брокер типа кафки Свою написатель мессадж мьюзик этот робиттом кью что-то такое то есть вот там вот вы Вот это Вот еще как-то сможете заюзать
Михаил Непряхин: Вот Но Так оно и очень Быстро, забывается.
Илиас Эззахид: Можно вопрос голос.
Михаил Непряхин: Да давайте начнем.
Илиас Эззахид: Ну это более философский такой вопрос вот у нас мы бываем
Илиас Эззахид: на сипе у пауты и бывают айо баунд и Зависимо от одного и другого нашего Мышления О конкурентности да и вообще О использовании каналах паторных должно измениться Зависимо от какого ну айо. Баудер или если биобаунд.
Михаил Непряхин: Ну да да то есть смотрите если у вас ну во-первых смотрите мы должны изначально понимать у нас сколько го макс прокс да
Михаил Непряхин: есть, ли у нас он
Михаил Непряхин: один
Михаил Непряхин: или два а так чаще, всего то есть, понимаете больше, двух оно вообще ну почти никогда Не бывает то Есть два это типа ну круто там вам дали ресурсов но вот Так он чаще, всего один
Михаил Непряхин: и сами понимаете как бы смысла нет на одном, ядре запускать сипию баунд в гуру тинах
Михаил Непряхин: потому что оцепию баун просто вас ну как вы целиком берете и все процессорное время используете
Михаил Непряхин: а если вы будете то же самое делать новгу рутинах какая Разница вы все равно на одном ядре Это будете делать но просто. Вы Еще будете тратить Время на переключение между Этими Гурутинами, Поэтому гору тины ну. Хорошо Допустим вот если. У вас два ядра,
Михаил Непряхин: тогда уже вы можете в двух Грутинах Сделать Свой сипиюбаум да то есть как бы тогда тут как Будто бы имеет смысл Но Не больше двух потому что, когда речь идет, о Сибири баунде то эта вот строгая параллельность Она Должна быть По Количеству вот этого гомакс-прокса
Михаил Непряхин: вот Поэтому в целом часто Видишь ну вот как у новичков? Такие Дурацкие. Примеры когда вот Хотят поработать
Михаил Непряхин: с бурутинами, но ведь задача не встречается таких. Чтобы можно было работать с бутинами
Михаил Непряхин: то есть как бы дают задачу простые коктейль там Нет возможности его рутины союзы и юзают грутины просто там например опендят
Михаил Непряхин: и допустим надо много символов много что-то запомнить с лайсами они создают два свайса и в двух Грутинах в эти два свайся опенди а потом Их соединяют ну короче какой-то такой бред вообще как бы бессмысленный в общем гурутины и имеет смысл использовать только Там где есть либо сеть
Михаил Непряхин: либо вы ну Логически вас допустим в одном приложении есть и сервер и Ворппер и кафка конюмер
Михаил Непряхин: и это как бы у вас получается. И
Михаил Непряхин: вот а вот это как бы гоухо хорошо позволяет делать но одну либо вы работаете с сетью, если вы роботе сетью, вот здесь бурутины, они прямо, раскрываются
Михаил Непряхин: вот Поэтому если учуть матрица перемножаете смысл делать Не, этот в гурутинах и Только если У вас немного Ядерного Оружия есть.
Илиас Эззахид: Можно тогда Еще один вопрос и.
Михаил Непряхин: Нет они не прибиваются гвоздями потоки то есть есть здесь проблемка небольшая что вы Можете ну как бы выполнять одну работу на одном метре
Михаил Непряхин: потом раз и поменяться с Другой, грутиной и на разных потоках они это будут делать и потом раз и опять, поменяться то есть вы тут кошевым Или потом Раз, поменяли Там крыши вымыли и вот так вот как бы ну, это вот такая небольшая неэффективность есть
Михаил Непряхин: то есть вы вообще никак, не контролируете на каком потоке чтобы отработать то есть в этом идее ну типа знаете как эээ Там в девяностые Прорыв случился с автоматическим управлением памяти когда появилась Там бетон Джава Там руби
Михаил Непряхин: и языки Которые с и
Михаил Непряхин: Ядрами сипию потоками и вы вообще как бы ничего не контролируете вы просто говорите Что, ну. Желаю, исполнить это в двух потоках, и гоу как-то это Делает под Копожем
Михаил Непряхин: Магически даже если потоков не два а Один, все равно сделают
Михаил Непряхин: Но вот Поэтому как бы это вот автоматическое управление потоками тут как бы и есть небольшие, минусы что гвоздями ничего не пробивается
Михаил Непряхин: так Ммм Давайте Вопросы, Еще есть
Михаил Непряхин: так есть ли такое что вы прямо. Вообще очень сложно вообще вообще ничего не поняли
Михаил Непряхин: или все равно более менее в общих чертах это более или менее понятно,
Михаил Непряхин: ну, по крайней мере что это зачем это Или хотя бы идейно потому что
Михаил Непряхин: Ну типа синтаксис да тут в Синтаксисе очень много подводных камней но если Вот хотя бы Вы Примерно понимаете зачем Это нужно и как она Там
Михаил Непряхин: Распределяется По потокам
Михаил Непряхин: То ну хотя бы с помощью Чата трепет вы сперва что-то сможете написать а потом уже там посмотреть как оно работает
Михаил Непряхин: Окей на самом деле Вы здесь можете особо не париться и если даже ну правда я понимаю здесь сложно как бы это вообще отдельный фрейнморк но он игры в жизни как бы кроме как на собеседованиях больше нигде не нужен а задачки именно, которые Собеседование мы будем, Решать
Михаил Непряхин: вот Поэтому ну потом когда столкнетесь
Михаил Непряхин: ну в жизни когда надо Что то вот Будет сделать вот только тогда вы с Этим и До конца разберетесь
Михаил Непряхин: и просто вы Очень Не скоро, с Этим столкнетесь, видите как бы эти вещи дают писать только синьористым синьором у кого, большой опыт. С этим а и
Михаил Непряхин: в Обычной жизни в этом обычном круде в типичном приложении.
Михаил Непряхин: Просто Это Не Используется вы используете, уже готовы библиотеки которая под капотом и
Михаил Непряхин: и Поэтому как бы даже и заюзать Это особо негде Я Уж, Не говорю О каких-то еще Сложных патронах и их вообще в Принципе Вы Никогда Не увидите то есть Пулор. Испуган моргеров Бы когда-то хотя Бы столкнуться Не говоря уже о том о чем-то более сложном тему, форуме Там
Михаил Непряхин: а так ладно тут
Михаил Непряхин: я не стал сильно гнать чтобы побольше вам рассказать все таки Про рутинные потоки потому Что Мы все равно вот к ним больше уже и особо так не вернемся подробно а в Следующий Раз Начнем
Михаил Непряхин: аааа с докера из кубернетиса
Михаил Непряхин: а тут минимальные какие то примеры
Михаил Непряхин: так
Михаил Непряхин: ну ладно все тогда, здесь вопросов, нет все задавать от следующего раза
Михаил Непряхин: ты четверга
Михаил Непряхин: да пока.