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