
Roman
04.07.2017
10:27:42
хмм, ясно
значит у меня чуток неверное было представление о планировщике в Go

Daniel
04.07.2017
10:28:28
а еще можно в своих длинных циклах периодически звать https://golang.org/pkg/runtime/#Gosched
один раз так и пришлось делать

Google

Igor
04.07.2017
10:29:50
go же даже панику раньше кидал про dead lock если залочить все горутины

Daniel
04.07.2017
10:30:04
дедлок - это другое

Серж
04.07.2017
10:30:16
это лайвлок

Daniel
04.07.2017
10:30:37
эту ситуацию отдетектить автоматически непросто

Roman
04.07.2017
10:30:42
ну... в конце концов, так или иначе event loop и green threads на равных
event loop выигрывает в моих глазах в плане простоты написания кода из-за полного отсутствия параллельности (дебажить легче, проблемы очевиднее и прятаться им негде)
green threads выигрывают в производительности позволяя параллелить бизнес-логику но в учётом что пользователь отдаёт себе отчёт в правильной синхронизации потоков (дебажить такое относительно сложнее)

Daniel
04.07.2017
10:31:14

Серж
04.07.2017
10:31:17
многие считают наоборот - в го ты асинхронный код пишешь как синхронный

Roman
04.07.2017
10:31:45

Серж
04.07.2017
10:31:58
fetch-hell?

Ivan
04.07.2017
10:31:58
парни, вот расскажите, что думаете, Docker в прод тянуть надо или только для dev/test стоит юзать?

Daniel
04.07.2017
10:31:59
если у нас есть эвенты - есть и колбеки, бро

Roman
04.07.2017
10:32:14

Daniel
04.07.2017
10:32:22
а если эвенты спрятаны- это не эвентлуп

Google

Илья
04.07.2017
10:32:33

Andrew
04.07.2017
10:32:34

Серж
04.07.2017
10:32:37
рейс кондишн ты и на евент лупе с пулом тредов можешь сделать

Roman
04.07.2017
10:33:03

Daniel
04.07.2017
10:33:05
коллега нам про однопоточный эвентлуп задвигает же
нет эвента - нет эвентлупа

Roman
04.07.2017
10:34:22

Daniel
04.07.2017
10:34:55
и рейс получить так же легко, если только ты не на функциональном языке пишешь

Roman
04.07.2017
10:35:46
я полностью согласен, что синхронный код в green thread'е читается легче, но тем не менее, асинхронное программирование тоже на месте не стояло последние годы

Ivan
04.07.2017
10:37:02
так чо там с докером?

Andrew
04.07.2017
10:37:21

Aleksandr
04.07.2017
10:37:27

Серж
04.07.2017
10:37:30
ты в API шедулишь выполнение 2 функций, обе из которых работают допустим с одним и тем же глобальным динамическим массивом, евентлуп все это распараллеливает на пуле потоков и ты ИНОГДА видишь непредсказуемый результат
что может быть хуже?

Roman
04.07.2017
10:37:48

Aleksandr
04.07.2017
10:37:59

Roman
04.07.2017
10:38:03
потому-что читается сверху вниз но технически он асинхронен, лишь абстрагирован

Daniel
04.07.2017
10:39:06

Google

Aleksandr
04.07.2017
10:39:12

Roman
04.07.2017
10:39:55

Aleksandr
04.07.2017
10:40:45

Roman
04.07.2017
10:41:34
смотря какой абстракции API)
если пользователь используя event loop сам должен ещё и thread pool'е заботиться то с архитектурой платформы что-то не так)))

Aleksandr
04.07.2017
10:41:59
разруливать эффективный control flow в любом eventloop тот еще ад
и везде это потребность не закрытая из коробки

Roman
04.07.2017
10:42:49

Daniel
04.07.2017
10:43:16
ну и где тут эвентлуп?

Aleksandr
04.07.2017
10:43:44

Roman
04.07.2017
10:43:46

Daniel
04.07.2017
10:44:07
это все те же гринтреды, с явным указанием yield (он там, где точка)

Aleksandr
04.07.2017
10:44:11
когда вместо спагетти у тебя линейный await или go, то это радикально упрощает код

Roman
04.07.2017
10:44:32

Aleksandr
04.07.2017
10:44:39

Roman
04.07.2017
10:45:34
в отличии от императивного - нет callback hell'а

Google

Roman
04.07.2017
10:46:26

Aleksandr
04.07.2017
10:46:26

Roman
04.07.2017
10:46:35

Aleksandr
04.07.2017
10:47:38
ну когда асинхронные цепочки нужно выполнять, часть строго друг за другом, часть одновременно, и так далее
это именно бизнес-логика в переложении на eventloop

Roman
04.07.2017
10:48:16
и.. в чём проблема?
не совсем понимаю

Aleksandr
04.07.2017
10:49:28
ни в чем, если у тебя нет планировщика иди и делай планирование сам, не бизнес-логику пиши а эффективное планирование, а проблемы принципиально никакой
в го такой проблемы нет
в питоне она колоссальна, в ноде тоже выражена очень

Admin
ERROR: S client not available

Roman
04.07.2017
10:51:16
всё-равно не совсем понимаю, планирование? в каком плане "планирование"??

Aleksandr
04.07.2017
10:54:36
кто разрулит это за тебя?

Серж
04.07.2017
10:55:52
а в го кто за тебя это разрулит?

Roman
04.07.2017
10:55:57
а с green thread'ами типа такого рода "планирование" отпадает?))

Серж
04.07.2017
10:56:19
ты говоришь, что через отправку сообщений это сделать проще?

Roman
04.07.2017
10:56:21
это часть бизнес логики

Daniel
04.07.2017
10:56:57

Roman
04.07.2017
10:59:04
streams.join(firstTask(...), secondTask(...))
.attach(stream {
streams.race(thirdTask(...), fourthTask(...))
.attach(stream.close())
})
.failure(...)

Google

Roman
04.07.2017
10:59:51
это подход со стримами... позволяет относительно просто описывает довольно сложный асинхронный control flow

Daniel
04.07.2017
11:00:05
коллега
вы же сами видите, сколько тут синтаксического мусора

Aleksandr
04.07.2017
11:00:31

Roman
04.07.2017
11:01:29
я же неоднократно утверждал что синхронный код на green thread'ах читается проще)))
я ВОВСЕ не спорю с этим
я лишь представляю control flow решения со стороны асинхронного подхода
в event loop'е синхронный код не попишешь
но и callback'и там давным давно уже неактуальны
почти в любой среде GUI и с Node теперь даже на сервере у нас event loop

Aleksandr
04.07.2017
11:02:40
я хочу так
await loop.parallel(Job(a), Job(a), loop.series(Job(a1), Job(a2)))

Roman
04.07.2017
11:02:43
и код писать приходится именно асинхронно

Aleksandr
04.07.2017
11:04:08

Roman
04.07.2017
11:05:11
можно ли приостановить и продолжить или отменить во время исполнения async await ?

Aleksandr
04.07.2017
11:05:46

Roman
04.07.2017
11:05:59

Aleksandr
04.07.2017
11:06:00
но тонкости есть везде свои
если там нить внутри то надо это поддерживать

Roman
04.07.2017
11:08:08
в каком языке и для каких операций?
я на данный момент пишу реализацию для Qt Quick (языки: C++ & QML)
самая первая проблема с которой мы тогда столкнулись это network filesystem API, а именно асинхронная по-чанковая загрузка больших файлов
task.cancel например в питоне
проблема в том, что если операция состоит из под-операций то тут всё сложнее.. а со стримами всё относительно просто
стримы могут состоять из стримов в периоде
внутри одного стрима могут быть 4 последовательных из которых он состоит
они могут быть либо atomic либо abortable