17:55:29 From Nikolay : Добрый вечер, + 17:55:29 From denis : + 17:55:52 From Nikolay : + 17:56:01 From denis : + 17:56:22 From Mike Deruygin : вечер добрый 17:56:43 From Mike Deruygin : - 17:56:43 From denis : Нет 17:57:30 From Mike Deruygin : про конкуретность, практические неочевидные моменты интересны 17:59:23 From Eugene Klimov : про контексты может быть, многие спрашивали 18:00:53 From Елена Граховац : “Практические неочевидные моменты” - очень абстрактно звучит :) Про контекст записала себе, посмотрим примеры, да. 18:01:15 From Mike Deruygin : хорошие практики для применения интересны, наподобии таких https://play.golang.org/p/SF7ZNXkFtQs 18:01:18 From iPhone SAP : звук есть? 18:01:26 From Mike Deruygin : у меня нет 18:01:41 From Dmitry Pavlov : + 18:01:43 From denis : + 18:01:43 From Nikolay : + 18:01:45 From Mike Deruygin : слышно 18:01:52 From iPhone SAP : + 18:02:29 From Даурен : привет 18:02:31 From Даурен : Есть кто? 18:02:38 From Vyacheslav.Sitnikov : есть 18:03:40 From Mike Deruygin : чтобы не звучало абстрактно, надо иметь за плечами рабочую практику с полгодика решения бизнес задач, пока такого нет, могу только абстрактно ) 18:04:06 From Vyacheslav.Sitnikov : а про что речь? 18:04:32 From Mike Deruygin : вопросы про конкрунтность 18:04:47 From andrey : Как отлавливать ошибки в горутинах? ведь go func не возвращает ошибок 18:05:02 From denis : Через канал ошибок 18:06:37 From andrey : отдельную горутину для обработки ошибок? 18:07:05 From andrey : В которой читать канал с ошибками? 18:07:33 From Mikhail : кстати, как правильно журналировать из горутин? Они же параллельно выполняются ) 18:07:34 From denis : Атомики интересны 18:07:41 From iPhone SAP : context 18:07:47 From Pavel : дебаг конкурентности … 18:07:49 From Mikhail : +1 за context 18:08:05 From denis : Да каналы были 18:08:18 From denis : И про логи было 18:08:59 From andrey : grasefull shutdown был 18:09:12 From denis : Да было про graceful, мне кажется многие не смотрели предыдущие лекции)) 18:09:50 From andrey : + 18:09:50 From Dmitry Pavlov : + 18:09:51 From Vyacheslav.Sitnikov : + 18:09:51 From Mike Deruygin : + 18:09:51 From Dmitry : + 18:09:51 From denis : + 18:09:52 From Nikolay : + 18:10:03 From Mikhail : + 18:11:43 From denis : 3-й пункт классный)) 18:12:48 From denis : Звук опять заикался… 18:13:03 From denis : Интернет походу 18:13:05 From Mike Deruygin : сейчас нормально 18:13:32 From denis : Планировать 18:13:37 From denis : ))) 18:13:50 From denis : Переключать контекст горутин 18:14:01 From Mike Deruygin : если горутина, допустим, прерывается, то планировщик может выделить ресурс для ожидающей горутины 18:14:03 From Даурен : epoll? 18:14:07 From denis : Выгружать и загружать кеш в проц 18:15:02 From Mike Deruygin : перебрасить рутину с одного треда на другой 18:15:32 From denis : хорошие и плохие) 18:15:35 From Vyacheslav.Sitnikov : cron 18:15:37 From Mike Deruygin : БД 18:15:48 From Vyacheslav.Sitnikov : это и есть cron 18:16:42 From Eugene Klimov : systemd 18:20:47 From Mike Deruygin : M 18:20:50 From Dmitry Pavlov : M 18:20:56 From denis : Ее нет 18:21:08 From Даурен : P 18:21:09 From andrey : M 18:21:10 From Eugene Klimov : P 18:21:14 From denis : Треды в одном процессоре - могут несколько 18:21:18 From Nikolay : P 18:21:28 From Mikhail : P 18:21:33 From Даурен : Props больше к железу ближе 18:22:25 From Даурен : Maxprocs я имел ввиду 18:22:32 From Ivan Ivanov : 0 18:22:35 From Eugene Klimov : кол-во ядер 18:22:37 From denis : То есть P - это все таки о кол-ве ядер? 18:22:38 From Dmitry Pavlov : Скольо ядер 18:25:08 From denis : В чем отличие от глобальной и локально? 18:25:30 From Nikolay : Как из глобальной распределяются по локальным? 18:25:48 From Mike Deruygin : M может быть больше P ? 18:26:06 From Mike Deruygin : ага, спасибо 18:26:08 From denis : Где храниться глобальная очередь? 18:26:09 From Nikolay : Может нескольк М работать? 18:26:47 From Nikolay : Один М работает на оном P в один момент времени? Это всегда так? 18:28:03 From Mike Deruygin : а как это - заблокирован P ? 18:28:13 From Ivan Ivanov : М может переноситься между Р? или он привязан? 18:28:27 From denis : А смысл создавать M, если P заблокирован? 18:29:08 From Даурен : Зачем нужны M и P? Нельзя было обойтись тредами? 18:29:43 From Даурен : я имею ввиду что, планировать треды уже к ОС 18:30:00 From denis : Переключение контекста дорогое 18:30:57 From denis : И все же планировщик должен уметь переключать контекст с выгрузкой и загрузкой кеша в проц, разве этим он не занимается? 18:33:42 From denis : Он берет из глобальной и кладет в локальную? 18:35:02 From denis : Что такое net poller? 18:35:18 From Nikolay : Что означало 1/61 ? 18:35:56 From Nikolay : О. спасибо 18:38:05 From Mikhail : у go-рутин есть приоритеты (как у процессов в ОС)? 18:38:36 From Даурен : Мютексы тоже системные? 18:38:53 From denis : А можно примеры системных вызовов 18:39:28 From Даурен : kill 18:39:36 From denis : Все IO вызовы? 18:41:35 From Даурен : нельзя 18:41:37 From Dmitry Pavlov : мне кажется нет 18:41:39 From denis : Если есть вопрос, то скорее да) 18:41:42 From Ivan Ivanov : думаю можно 18:41:47 From iPhone SAP : Нет 18:41:48 From andrey : нет 18:41:55 From Nikolay : наверное нет, раз планировщик занимается этим 18:42:19 From Даурен : Музыка играет 18:42:26 From Даурен : В фоне 18:42:36 From Даурен : Для треда, да 18:42:47 From Dmitry Pavlov : Может какая-то числодробилка? 18:42:50 From denis : Как-то нагруженный разборщик очереди 18:43:10 From Mike Deruygin : пару демонов повесить? 18:51:16 From denis : Вопрос не в тему. sync.Pool - атомарно присваивает и возвращает данные? 18:53:05 From denis : trace - это как профилировщик? 18:53:28 From Даурен : мало было 18:53:30 From denis : Про трасировщик не говорили 18:54:17 From Даурен : А вообще для чего он? 18:55:16 From denis : Трассировщик сам в файл пишет? 18:58:57 From denis : Если нет запросов, то думаю это нормально 19:00:42 From denis : ок) 19:00:55 From denis : Можете что-нибудь рассказть про мьютекс на процессоре (spin lock)? 19:01:13 From denis : хорошо 19:02:29 From Елена Граховац : Продолжаем через 2 минуты 19:04:13 From Mike Deruygin : на одной М у нас сидит одна G, правильно? 19:05:52 From Mike Deruygin : спасибо 19:08:10 From denis : А value? 19:08:20 From Даурен : что такое контексты? 19:08:20 From denis : WithValue 19:09:54 From denis : Можно ли с помощью него передавать данные в горутины? 19:10:02 From Mike Deruygin : т.е. контекст, это какой-то параллельный поток, который может коннектиться ко всем запущенным горутинам*? 19:11:05 From Nikolay Yakubitskiy : контекст - это аналог каналов? 19:11:19 From Dmitry Pavlov : Обертка над каналом 19:15:14 From iPhone SAP : цикл 19:15:14 From Даурен : Next? 19:15:14 From Eugene Klimov : чтение из канала 19:15:23 From Dmitry Pavlov : range 19:15:23 From Mike Deruygin : select 19:15:27 From Vyacheslav.Sitnikov : с таймаутом 19:15:57 From Dmitry Pavlov : тогда и range сойдет, мультиплексии же нет) 19:16:28 From Dmitry Pavlov : for range ticker 19:16:29 From Даурен : For { 19:17:08 From denis : _, _ 19:17:09 From Dmitry Pavlov : for range ticker 19:17:13 From Mike Deruygin : for _ range = ticker 19:22:42 From Dmitry Pavlov : в структуру контекст 19:23:51 From Dmitry Pavlov : тут уже select 19:24:17 From Vyacheslav.Sitnikov : select { case <-time.After(time.Millisecond * 100): lalala } 19:24:27 From Dmitry Pavlov : for { select { } } 19:24:46 From iPhone SAP : цикл 19:24:48 From iPhone SAP : нще 19:24:58 From denis : Цикл 19:28:01 From Dmitry Pavlov : 15 19:28:02 From denis : Написало же 19:28:28 From Даурен : То есть у контекстов всегда есть “Done”? 19:29:19 From Vyacheslav.Sitnikov : А давайте при первом нажатии Ctrl+C оно пытается остановиться нормально, но долго (секунд 10), при этом, если во время остановки нажать Ctrl+C второй раз - стопится жёстко 19:30:41 From denis : Второй <-stopch 19:31:27 From Даурен : 2? 19:31:31 From denis : В цикле таймоут 19:31:34 From iPhone SAP : ещё одна рутина 19:31:44 From Даурен : размер канала в 2 19:32:16 From Даурен : А зачем нам тайм слип? 19:32:34 From Даурен : тайм слип нужен в sched.go 19:33:37 From denis : В цикле только 19:33:50 From Mike Deruygin : а зачем тут цикл? 19:34:22 From denis : После первого кейса выйдем, если цикла не будет 19:34:43 From Vyacheslav.Sitnikov : 30 секунд много 19:34:47 From Dmitry Pavlov : это select 19:35:01 From denis : А да, понял, да да 19:35:08 From Vyacheslav.Sitnikov : а можор просто было: case <-time.After(time.Millisecond * 100): 19:35:13 From Vyacheslav.Sitnikov : *можно 19:36:04 From Vyacheslav.Sitnikov : Так имеется в виду, что горутина долго работает :) 19:36:24 From Vyacheslav.Sitnikov : 10 секунд горутина стопится 19:36:30 From Vyacheslav.Sitnikov : а не основное приложение 19:36:35 From Даурен : “тайм слип нужен в sched.go” я говорил )) 19:37:27 From Даурен : суть в том что sched завершается долго 19:39:30 From Елена Граховац : https://otus.ru/polls/4908/ 19:39:51 From Елена Граховац : ^ Опрос о занятии 19:39:57 From Елена Граховац : Ссылка на слайды: https://clck.ru/JjyJ3 19:43:06 From Vyacheslav.Sitnikov : а зачем мы stderr писали в трейс? 19:43:24 From denis : Вы трассировщик не включили вроде как (не раскомментировали) 19:43:25 From Dmitry Pavlov : Почему мы не запустили сам трасировщик в коде? 19:44:57 From Vyacheslav.Sitnikov : так откуда там трассировщику взятся? там же простой запуск? 19:45:01 From Vyacheslav.Sitnikov : или я что-то пропустил? 19:45:41 From Даурен : WaitGroup 19:48:09 From Даурен : Если нужен результат - то лучше просто канал 19:48:44 From Mike Deruygin : а мы через контекст разве не можем вернуть n ? 19:49:17 From denis : sync.Pool? 19:50:03 From denis : wg.Add(1) 19:50:16 From Dmitry Pavlov : wg.Add(1) wg.Done() 19:51:23 From Даурен : make 19:51:24 From Dmitry Pavlov : make(chan int) 19:51:40 From Dmitry Pavlov : не так же 19:52:50 From Даурен : но теперь мы можем сделать select 19:52:55 From Dmitry Pavlov : Тут с каналом лучше выглядит 19:53:08 From Даурен : для SIGINT 19:53:23 From Даурен : Второй ctrl+C 19:53:33 From denis : А если несколько различных горутин, которые возвращают различные данные? 19:53:58 From denis : Как из все дождаться? 19:54:03 From denis : их; 19:54:30 From Vyacheslav.Sitnikov : Так вопрос был в том, что горутина долго работает и если совсем долго, то вторым Ctrl+C прервать всё 19:54:46 From Mike Deruygin : а давайте на context timeout перепишем sched 19:55:38 From Vyacheslav.Sitnikov : это уже вы придумали, а изначально я друго просил: От меня всем: 09:28 PM А давайте при первом нажатии Ctrl+C оно пытается остановиться нормально, но долго (секунд 10), при этом, если во время остановки нажать Ctrl+C второй раз - стопится жёстко 19:56:39 From Vyacheslav.Sitnikov : Легко, например кто-то обрабатывает пришёдшие данные 19:56:40 From Dmitry Pavlov : Ну в том for select сделать таймаут еще 19:56:57 From Dmitry Pavlov : тогда типа сэмулируем долгую остановку 19:57:12 From denis : Лучше (производительней) передача значений через канал или sync.Pool? 19:58:44 From Елена Граховац : https://play.golang.org/p/IHrRgwz0Tzf 19:59:33 From denis : sync.Pool.Set(interface{}) и sync.Pool.Get() 19:59:35 From Vyacheslav.Sitnikov : У нас часто бывает ситуация, когда запросы в БД выстраиваются в очередь и желательно дождаться окончания их работы, при первом Ctrl+C они просто перестают добавляться и ожидается, когда они отработают, но при втором Ctrl +C, всё нафиг убивается (ибо может соединение просто повиснуть) 19:59:55 From Dmitry Pavlov : sync.Pool не примитив синхронизации, он для уменьшения алокация 20:00:08 From Dmitry Pavlov : для больших объектов 20:00:22 From Mike Deruygin : any item stored in the poll may be removed automatically 20:00:32 From Vyacheslav.Sitnikov : да это этот же кейс, просто реальный пример 20:00:50 From Mike Deruygin : т.е. через них данные (допустим из апи) как бы лучше не передавать 20:01:15 From Vyacheslav.Sitnikov : вообще не то реализовали :) Где второй Ctrl + C ? :)) 20:01:46 From denis : А в чем разница дидлайн и тайиаут? 20:03:50 From denis : А там дата, понял 20:06:20 From Даурен : А где мы использовали этот самый timeout 5сек? 20:07:06 From Даурен : давайте попробуем? 20:08:04 From Даурен : А я думал он начнет стать 5 сек ПОСЛЕ cancel 20:10:04 From Dmitry Pavlov : v := <- n 20:10:07 From denis : новую переменную в кейсе с n 20:11:15 From Dmitry Pavlov : да, еще раз вычитать 20:12:02 From denis : Давайте уже трейс запустим) 20:13:53 From Даурен : View options 20:15:40 From denis : Мы ее получали на прошлом занятии 20:16:46 From denis : _ “net/http/pprof” 20:18:40 From Dmitry Pavlov : pprof/debug 20:19:03 From Mike Deruygin : http://localhost:6060/debug/pprof/profile?seconds=30 20:19:47 From Mike Deruygin : ?seconds=5 20:22:24 From Mike Deruygin : там trace.out ент ли случае? 20:23:32 From Ivan Ivanov : спасибо) 20:23:39 From Даурен : спасибо 20:23:41 From Nikolay Yakubitskiy : Спасибо) 20:23:41 From Mikhail : Спасибо! 20:23:42 From Mike Deruygin : большое спасибо! было очень здорово! 20:23:45 From Nikolay : Спасибо! 20:23:53 From Vyacheslav.Sitnikov : вам спасибо