Сережа
если у тебя одноядерный процессор то заблокируется
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 выигрывают в производительности позволяя параллелить бизнес-логику но в учётом что пользователь отдаёт себе отчёт в правильной синхронизации потоков (дебажить такое относительно сложнее)
Daniel
Сережа
многие считают наоборот - в го ты асинхронный код пишешь как синхронный
Сережа
fetch-hell?
Ivan
парни, вот расскажите, что думаете, Docker в прод тянуть надо или только для dev/test стоит юзать?
Daniel
если у нас есть эвенты - есть и колбеки, бро
Daniel
а если эвенты спрятаны- это не эвентлуп
Илья
Anonymous
Сережа
рейс кондишн ты и на евент лупе с пулом тредов можешь сделать
Daniel
коллега нам про однопоточный эвентлуп задвигает же
Daniel
Daniel
нет эвента - нет эвентлупа
Daniel
и рейс получить так же легко, если только ты не на функциональном языке пишешь
Roman
я полностью согласен, что синхронный код в green thread'е читается легче, но тем не менее, асинхронное программирование тоже на месте не стояло последние годы
Ivan
так чо там с докером?
Aleksand
Сережа
ты в API шедулишь выполнение 2 функций, обе из которых работают допустим с одним и тем же глобальным динамическим массивом, евентлуп все это распараллеливает на пуле потоков и ты ИНОГДА видишь непредсказуемый результат
Сережа
что может быть хуже?
Roman
Aleksand
Roman
потому-что читается сверху вниз но технически он асинхронен, лишь абстрагирован
Aleksand
Aleksand
Roman
Roman
Aleksand
Roman
смотря какой абстракции API)
если пользователь используя event loop сам должен ещё и thread pool'е заботиться то с архитектурой платформы что-то не так)))
Aleksand
разруливать эффективный control flow в любом eventloop тот еще ад
Aleksand
и везде это потребность не закрытая из коробки
Aleksand
Roman
ну я про стиль же написания и чтения и говорю
http.get()
.then(...)
.then(...)
.catch(...)
вот тебе пример псевдо-синхронного кода, он читается как синхронный сверху вниз, последовательно, однако технически он асинхронный
Daniel
ну и где тут эвентлуп?
Aleksand
Daniel
это все те же гринтреды, с явным указанием yield (он там, где точка)
Aleksand
когда вместо спагетти у тебя линейный await или go, то это радикально упрощает код
Roman
Aleksand
Aleksand
Roman
в отличии от императивного - нет callback hell'а
Roman
Aleksand
Roman
Aleksand
ну когда асинхронные цепочки нужно выполнять, часть строго друг за другом, часть одновременно, и так далее
Aleksand
это именно бизнес-логика в переложении на eventloop
Roman
и.. в чём проблема?
Roman
не совсем понимаю
Aleksand
ни в чем, если у тебя нет планировщика иди и делай планирование сам, не бизнес-логику пиши а эффективное планирование, а проблемы принципиально никакой
Aleksand
в го такой проблемы нет
Aleksand
в питоне она колоссальна, в ноде тоже выражена очень
Roman
всё-равно не совсем понимаю, планирование? в каком плане "планирование"??
Aleksand
кто разрулит это за тебя?
Сережа
а в го кто за тебя это разрулит?
Roman
а с green thread'ами типа такого рода "планирование" отпадает?))
Сережа
ты говоришь, что через отправку сообщений это сделать проще?
Roman
это часть бизнес логики