Size: a a a

Programming Offtop

2020 April 21

AK

Anton Korotkikh in Programming Offtop
Vladimir Petrakovich
В джаве - да, ещё не завезли. Но async-await - это считай грин-треды. Или если не как в го, не считается?
да промисы это, которые эзкекутор дёргает. это вопрос спорный, у меня имхо по поводу грин треда такое:
для меня как для юзера, код внутри грен треда не отличается от обычного тредового, это большей уровень абстракции. условно говроя в грин треде я пишу что-то типа
x = conn.receive() и умный шедулер сам поймёт, что тут у нас ио, пока уйдёт отсюда поделает, что-то другое.
а промисы - это обычные треды, мне самом ручками нужно как-то сказать от этом conn.receive().then(x => ...) или под сахаром x = await conn.receive()
источник

VP

Vladimir Petrakovich in Programming Offtop
> Once you start working with system threads, you’ll need to be careful about mutable data structures.
Лол, проблем завезли, а параллельное исполнение - нет. Какая-то странная многопоточка в этом вашем OCaml.
источник

VP

Vladimir Petrakovich in Programming Offtop
Anton Korotkikh
да промисы это, которые эзкекутор дёргает. это вопрос спорный, у меня имхо по поводу грин треда такое:
для меня как для юзера, код внутри грен треда не отличается от обычного тредового, это большей уровень абстракции. условно говроя в грин треде я пишу что-то типа
x = conn.receive() и умный шедулер сам поймёт, что тут у нас ио, пока уйдёт отсюда поделает, что-то другое.
а промисы - это обычные треды, мне самом ручками нужно как-то сказать от этом conn.receive().then(x => ...) или под сахаром x = await conn.receive()
А если довести сахар до уровня "не надо руками писать await и играться с композицией промисов", это уже грин-треды или ещё нет?
источник

AK

Anton Korotkikh in Programming Offtop
Andrew Mikhaylov
То есть есть системные треды, но нет параллелизма из-за глобального лока
лол, это даже хуже чем нода
источник

VP

Vladimir Petrakovich in Programming Offtop
По сути грин-тред - это вычисление, которое можно приостановить в какой-то точке, отпустив системный поток
источник

AK

Anton Korotkikh in Programming Offtop
Vladimir Petrakovich
А если довести сахар до уровня "не надо руками писать await и играться с композицией промисов", это уже грин-треды или ещё нет?
с точки зрения UX для меня бы были это грин треды. спорный вопрос, все их ещё называют по разному - грин треды, корутины, файберы... сколько реализаций столько и мнений, мнений ещё больше даже
источник

VP

Vladimir Petrakovich in Programming Offtop
Anton Korotkikh
с точки зрения UX для меня бы были это грин треды. спорный вопрос, все их ещё называют по разному - грин треды, корутины, файберы... сколько реализаций столько и мнений, мнений ещё больше даже
Так это всё по сути одно и то же 🤷‍♂️
источник

AK

Anton Korotkikh in Programming Offtop
Vladimir Petrakovich
Так это всё по сути одно и то же 🤷‍♂️
в какой степени да, но детально нет. слишком разные реализации и итоговое применение
источник

AK

Anton Korotkikh in Programming Offtop
условно нодовые промисы и гошные корутины вещи очень разные на практике
источник

VP

Vladimir Petrakovich in Programming Offtop
Anton Korotkikh
условно нодовые промисы и гошные корутины вещи очень разные на практике
А в чём отличие?
источник

AK

Anton Korotkikh in Programming Offtop
Vladimir Petrakovich
А в чём отличие?
в жс нужно я явном виде указывать, что является промисом. это было в примере выше.
конретно как для разработчика разница, например в

- функции имеют разные типы возврата, например Promise<String> против String, а гошке был бы String просто везде

- в гошке всё одном пространстве, можно иметь шаренные между тредами стуркутры а-ля из java.util.concurrent. в ноде все заперты внутри своего экземпляра Isolate с одним тредом. поашрить ничего нельзя кроме специального сырого буфера (sharedArrayBuffer)
источник

VP

Vladimir Petrakovich in Programming Offtop
Anton Korotkikh
в жс нужно я явном виде указывать, что является промисом. это было в примере выше.
конретно как для разработчика разница, например в

- функции имеют разные типы возврата, например Promise<String> против String, а гошке был бы String просто везде

- в гошке всё одном пространстве, можно иметь шаренные между тредами стуркутры а-ля из java.util.concurrent. в ноде все заперты внутри своего экземпляра Isolate с одним тредом. поашрить ничего нельзя кроме специального сырого буфера (sharedArrayBuffer)
Вторая особенность вообще не связана с промисами/грин-тредами. Вон в джаве у тебя нормальная многопоточка, но грин-тредов не завезли, остаётся только играться коллбеками.
источник

AK

Anton Korotkikh in Programming Offtop
Vladimir Petrakovich
Вторая особенность вообще не связана с промисами/грин-тредами. Вон в джаве у тебя нормальная многопоточка, но грин-тредов не завезли, остаётся только играться коллбеками.
она связана с реализацией
источник

VP

Vladimir Petrakovich in Programming Offtop
Anton Korotkikh
она связана с реализацией
Она связана с тем, можно ли тебе работать с shared mutable state или нет
источник

AK

Anton Korotkikh in Programming Offtop
Vladimir Petrakovich
Она связана с тем, можно ли тебе работать с shared mutable state или нет
я не понимаю, что ты пытаешься мне доказать.
источник

I

Igor in Programming Offtop
Anton Korotkikh
лол, это даже хуже чем нода
Бранчик с мультикор уже почти готов, что бы в мастер лить.
Говорят там в комплекте будут еще и алгебраические-эффекты (но это не точно) - интересно будет попробовать.

Да и опыт clojure/f# - говорит о том что фп языки отлично работают с мультипоточностью.
(правда для gc там куча новых проблем появится)
источник

VP

Vladimir Petrakovich in Programming Offtop
Про разный тип возврата - ок. Гошка умеет усыплять горутину в любой точке, а вот некоторые другие реализации "грин-тредов" - только в явно размеченных.
источник

AK

Anton Korotkikh in Programming Offtop
короче промисы != грин треды. ты можешь сделать промисы поверх грин тредов, но не наоборот - останутся различные косяки и рудименты
источник

VP

Vladimir Petrakovich in Programming Offtop
Anton Korotkikh
короче промисы != грин треды. ты можешь сделать промисы поверх грин тредов, но не наоборот - останутся различные косяки и рудименты
Посмотри на котлин
источник

VP

Vladimir Petrakovich in Programming Offtop
Вот смотри: в гошке можно дёргать сишные либы?
источник