@gogolang

Страница 355 из 1630
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 выигрывают в производительности позволяя параллелить бизнес-логику но в учётом что пользователь отдаёт себе отчёт в правильной синхронизации потоков (дебажить такое относительно сложнее)

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

Roman
04.07.2017
10:31:45
коллега, вы троллите? какая такая простота в колбеках?
callback'и уже давным давно никто не пишет ?

Серж
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
многие считают наоборот - в го ты асинхронный код пишешь как синхронный
однако обязан синхронизировать взаимодействие потоков, как не крути, race condition дебажить не айс

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

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

Roman
04.07.2017
10:33:03
если у нас есть эвенты - есть и колбеки, бро
я имею ввиду в callback стиле никто уже давно не пишет, современные подходы такие как promises или reactive + streams

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

я имею ввиду в callback стиле никто уже давно не пишет, современные подходы такие как promises или reactive + streams
еще раз, есть эвент - есть его обработчик. который называется коллбэк

нет эвента - нет эвентлупа

Roman
04.07.2017
10:34:22
рейс кондишн ты и на евент лупе с пулом тредов можешь сделать
с точки зрения пользователя ты к thread pool'ам обычно не притрагиваешься, это за тебя делает API которой ты внутри своей бизнес логики пользуешься

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

Roman
04.07.2017
10:35:46
еще раз, есть эвент - есть его обработчик. который называется коллбэк
утверждение что "callback это плохо" уже попросту неактуально, поскольку в стиле который порождате такие проблемы как callback hell и т.д. никто сейчас не пишет

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

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

Andrew
04.07.2017
10:37:21
так чо там с докером?
Пажди, ещё не закончили.

Серж
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
я полностью согласен, что синхронный код в green thread'е читается легче, но тем не менее, асинхронное программирование тоже на месте не стояло последние годы
если от нас спрятали эвенты - это больше не эвентлуп. а если нам все так же надо получить событие, обработать его и отдать управление - это все еще гораздо сложнее для понимания, чем любая синхронизация потоков

Google
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
ну я про стиль же написания и чтения и говорю
http.get() .then(...) .then(...) .catch(...) вот тебе пример псевдо-синхронного кода, он читается как синхронный сверху вниз, последовательно, однако технически он асинхронный

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

Aleksandr
04.07.2017
10:43:44
http.get() .then(...) .then(...) .catch(...) вот тебе пример псевдо-синхронного кода, он читается как синхронный сверху вниз, последовательно, однако технически он асинхронный
ну я говорил что синхронный стиль асинхронного кода заставит его выполняться технически синхронно? вроде нет

Roman
04.07.2017
10:43:46
ну и где тут эвентлуп?
event loop собственно и исполняет данный код

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
это все те же гринтреды, с явным указанием yield (он там, где точка)
ну да, корутины везде или генераторы если ниже

Roman
04.07.2017
10:45:34
это все те же гринтреды, с явным указанием yield (он там, где точка)
нет, это не green thread, это декларативное определение обработчиков

в отличии от императивного - нет 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
всё-равно не совсем понимаю, планирование? в каком плане "планирование"??
ну вот приходит тебе список из N задач, их надо выполнить асинхронно, но M задач из списка должны быть выполнены только после того как выполнятся все задачи определенного типа, а T задач сразу же после того как завершена хотя бы одна другого определенного типа.

кто разрулит это за тебя?

Серж
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
а с green thread'ами типа такого рода "планирование" отпадает?))
вообще-то да. ты просто пишешь последовательный код. где надо - ждешь, где надо - вызываешь синхронный обработчик

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
коллега

вы же сами видите, сколько тут синтаксического мусора

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
ну.. хоти)) что я могу сказать
я так и пишу, и отлично работает, просто не хочется это реализовывать самому внутри щелкая eventloop

Roman
04.07.2017
11:05:11
я так и пишу, и отлично работает, просто не хочется это реализовывать самому внутри щелкая eventloop
streams подход разрабатывался для останавливаемых и отменяемых "потоков"

можно ли приостановить и продолжить или отменить во время исполнения async await ?

Roman
04.07.2017
11:05:59
да
как это выглядит?

Aleksandr
04.07.2017
11:06:00
но тонкости есть везде свои

как это выглядит?
task.cancel например в питоне

если там нить внутри то надо это поддерживать

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

task.cancel например в питоне
проблема в том, что если операция состоит из под-операций то тут всё сложнее.. а со стримами всё относительно просто стримы могут состоять из стримов в периоде

внутри одного стрима могут быть 4 последовательных из которых он состоит они могут быть либо atomic либо abortable

Страница 355 из 1630