Сережа
если у тебя одноядерный процессор то заблокируется
Roman
если GOMAXPROC поставить на 1
Сережа
не может и это вроде как киллерфича, меньше синхронизаций нужно
Roman
for testing purposes only
Сережа
т.е. у тебя есть гарантия что переключение горутины будет происходить в определенные моменты
Сережа
мне это по нраву, кстати
Roman
хмм, ясно
Roman
значит у меня чуток неверное было представление о планировщике в Go
Daniel
а еще можно в своих длинных циклах периодически звать https://golang.org/pkg/runtime/#Gosched
Daniel
один раз так и пришлось делать
Igor
go же даже панику раньше кидал про dead lock если залочить все горутины
Daniel
дедлок - это другое
Сережа
это лайвлок
Daniel
эту ситуацию отдетектить автоматически непросто
Roman
ну... в конце концов, так или иначе event loop и green threads на равных event loop выигрывает в моих глазах в плане простоты написания кода из-за полного отсутствия параллельности (дебажить легче, проблемы очевиднее и прятаться им негде) green threads выигрывают в производительности позволяя параллелить бизнес-логику но в учётом что пользователь отдаёт себе отчёт в правильной синхронизации потоков (дебажить такое относительно сложнее)
Сережа
многие считают наоборот - в го ты асинхронный код пишешь как синхронный
Roman
коллега, вы троллите? какая такая простота в колбеках?
callback'и уже давным давно никто не пишет 😋
Сережа
fetch-hell?
Ivan
парни, вот расскажите, что думаете, Docker в прод тянуть надо или только для dev/test стоит юзать?
Daniel
если у нас есть эвенты - есть и колбеки, бро
Roman
многие считают наоборот - в го ты асинхронный код пишешь как синхронный
однако обязан синхронизировать взаимодействие потоков, как не крути, race condition дебажить не айс
Daniel
а если эвенты спрятаны- это не эвентлуп
Сережа
рейс кондишн ты и на евент лупе с пулом тредов можешь сделать
Roman
если у нас есть эвенты - есть и колбеки, бро
я имею ввиду в callback стиле никто уже давно не пишет, современные подходы такие как promises или reactive + streams
Daniel
коллега нам про однопоточный эвентлуп задвигает же
Daniel
я имею ввиду в callback стиле никто уже давно не пишет, современные подходы такие как promises или reactive + streams
еще раз, есть эвент - есть его обработчик. который называется коллбэк
Daniel
нет эвента - нет эвентлупа
Roman
рейс кондишн ты и на евент лупе с пулом тредов можешь сделать
с точки зрения пользователя ты к thread pool'ам обычно не притрагиваешься, это за тебя делает API которой ты внутри своей бизнес логики пользуешься
Daniel
и рейс получить так же легко, если только ты не на функциональном языке пишешь
Roman
еще раз, есть эвент - есть его обработчик. который называется коллбэк
утверждение что "callback это плохо" уже попросту неактуально, поскольку в стиле который порождате такие проблемы как callback hell и т.д. никто сейчас не пишет
Roman
я полностью согласен, что синхронный код в green thread'е читается легче, но тем не менее, асинхронное программирование тоже на месте не стояло последние годы
Ivan
так чо там с докером?
Anonymous
так чо там с докером?
Пажди, ещё не закончили.
Сережа
ты в API шедулишь выполнение 2 функций, обе из которых работают допустим с одним и тем же глобальным динамическим массивом, евентлуп все это распараллеливает на пуле потоков и ты ИНОГДА видишь непредсказуемый результат
Сережа
что может быть хуже?
Aleksand
Roman
потому-что читается сверху вниз но технически он асинхронен, лишь абстрагирован
Daniel
я полностью согласен, что синхронный код в green thread'е читается легче, но тем не менее, асинхронное программирование тоже на месте не стояло последние годы
если от нас спрятали эвенты - это больше не эвентлуп. а если нам все так же надо получить событие, обработать его и отдать управление - это все еще гораздо сложнее для понимания, чем любая синхронизация потоков
Roman
ты в API шедулишь выполнение 2 функций, обе из которых работают допустим с одним и тем же глобальным динамическим массивом, евентлуп все это распараллеливает на пуле потоков и ты ИНОГДА видишь непредсказуемый результат
код твоей бизнес-логики тебе синхронизировать не нужно поскольку поток исполнения один единственный, то что происходит на pool'ах позади API тебя не касается, ты пользователь API
Roman
смотря какой абстракции API)
если пользователь используя event loop сам должен ещё и thread pool'е заботиться то с архитектурой платформы что-то не так)))
Aleksand
разруливать эффективный control flow в любом eventloop тот еще ад
Aleksand
и везде это потребность не закрытая из коробки
Roman
ну я про стиль же написания и чтения и говорю
http.get() .then(...) .then(...) .catch(...) вот тебе пример псевдо-синхронного кода, он читается как синхронный сверху вниз, последовательно, однако технически он асинхронный
Daniel
ну и где тут эвентлуп?
Aleksand
http.get() .then(...) .then(...) .catch(...) вот тебе пример псевдо-синхронного кода, он читается как синхронный сверху вниз, последовательно, однако технически он асинхронный
ну я говорил что синхронный стиль асинхронного кода заставит его выполняться технически синхронно? вроде нет
Roman
ну и где тут эвентлуп?
event loop собственно и исполняет данный код
Daniel
это все те же гринтреды, с явным указанием yield (он там, где точка)
Aleksand
когда вместо спагетти у тебя линейный await или go, то это радикально упрощает код
Roman
ну я говорил что синхронный стиль асинхронного кода заставит его выполняться технически синхронно? вроде нет
обычно в данном случае употребляется "секвенциально", не знаю как в русскоговорящей сфере
Aleksand
это все те же гринтреды, с явным указанием yield (он там, где точка)
ну да, корутины везде или генераторы если ниже
Roman
это все те же гринтреды, с явным указанием yield (он там, где точка)
нет, это не green thread, это декларативное определение обработчиков
Roman
в отличии от императивного - нет callback hell'а
Roman
Aleksand
ну когда асинхронные цепочки нужно выполнять, часть строго друг за другом, часть одновременно, и так далее
Aleksand
это именно бизнес-логика в переложении на eventloop
Roman
и.. в чём проблема?
Roman
не совсем понимаю
Aleksand
ни в чем, если у тебя нет планировщика иди и делай планирование сам, не бизнес-логику пиши а эффективное планирование, а проблемы принципиально никакой
Aleksand
в го такой проблемы нет
Aleksand
в питоне она колоссальна, в ноде тоже выражена очень
Roman
всё-равно не совсем понимаю, планирование? в каком плане "планирование"??
Aleksand
всё-равно не совсем понимаю, планирование? в каком плане "планирование"??
ну вот приходит тебе список из N задач, их надо выполнить асинхронно, но M задач из списка должны быть выполнены только после того как выполнятся все задачи определенного типа, а T задач сразу же после того как завершена хотя бы одна другого определенного типа.
Aleksand
кто разрулит это за тебя?
Сережа
а в го кто за тебя это разрулит?
Roman
а с green thread'ами типа такого рода "планирование" отпадает?))
Сережа
ты говоришь, что через отправку сообщений это сделать проще?
Roman
это часть бизнес логики