170 похожих чатов

Подскажите, я тут прочитала про project loom, правильно ли я

понимаю, что он решит проблему нагрузки(по типу С10к) в синхронном виде, просто виртуальные потоки почему-то сравниваются с котлиновскими корутинами, но разве это не разные вещи? Корутины никак не помогают с блокирующими операциями, а только позволяют красиво писать асинхронный код(не считая IO dispatcher’а, но там же в принципе новый тред создается, так что проблема нагрузки точно не решается), или я не права?

29 ответов

25 просмотров

Про какие именно блокирующие операции? В корутинах все сделано в расчете на suspend методы, при которых будет запланирована следующая корутина. В виртуальных потоках по идее любая блокирующая может приводить к планирования другой блокирующей операции, если они их все так реализуют.Но идея похожа, поэтому и сравнивают

Анастасия- Автор вопроса
Владислав Хакин
Про какие именно блокирующие операции? В корутинах...

Ну я и говорю, в корутинах нельзя просто вызвать блокирующее чтение файла, например, она должна саспенд вернуть, а так мы просто поток заблочим, в отличии от виртуальных потоков, где просто контекст переключится на другой поток, т.е. это синхронный мир, не нужно использовать всякие реактивные драйвера для баз и т.д., когнитивная сложность гораздо ниже. Да и корутинам виртуальные потоки могут помочь, чтоб не блокировать настоящие поток. Просто почему-то корутины и виртуальные потоки сравнивают, говорят, что корутины - это легковесные потоки, но это же не совсем так, разве нет?

Анастасия
Ну я и говорю, в корутинах нельзя просто вызвать б...

Ну тут просто вопрос терминологии, они же позволяют легковесные операции, считай потоки. Да, конечно это отлично от loom, но у нас и нет его ещё. А принцип похож

Анастасия- Автор вопроса
Владислав Хакин
Ну тут просто вопрос терминологии, они же позволяю...

Ну просто в любом случае с корутинами нужно перестраивать мозг на асинхронный лад, в отличии, насколько я поняла, с лумом, но спасибо, стало яснее

Анастасия
Ну я и говорю, в корутинах нельзя просто вызвать б...

Корутины это библиотека над континуациями, которые работают так же как лум, потому и сравнивают. И блокирующий и неблокирующий код будут работать совершенно одинаково и там и там

Анастасия- Автор вопроса
Alexandr ∨∧‾ Emelyanov
Корутины это библиотека над континуациями, которые...

Хм, я думала, что лум - это стекфул корутины как бы, как в го, например.

Анастасия
Хм, я думала, что лум - это стекфул корутины как б...

Разница между корутинами и лумом - первые генерируют байт-код свёртки и развертки стека, а для вторых он есть в jvm

Анастасия- Автор вопроса
Alexandr ∨∧‾ Emelyanov
Корутины это библиотека над континуациями, которые...

Они же как-то умеют свичить контекст, когда поток заблокирован, как обычные треды, но в юзер спейсе, а все, что могут корутины - это запустить какой-то код, дождаться саспенда, а потом в колбэкэ закинуть на какой-то поток оставшиеся переходы стейт машины, но если в корутине заблокировать поток, то он заблокируется и никакого свичинга не будет. Может чего-то не понимаю, конечно.

Анастасия
Они же как-то умеют свичить контекст, когда поток ...

Нет, если поток заблокирован, то все, заблокирован

Анастасия- Автор вопроса
Alexandr ∨∧‾ Emelyanov
Нет, если поток заблокирован, то все, заблокирован

Ну вот же. Не заблокирует реальный поток. Результат около 400к. for (var i = 0; i < 1_000_000; i++) { Thread.startVirtualThread(() -> { c.incrementAndGet(); try { Thread.sleep(1_000); } catch (InterruptedException e) { e.printStackTrace(); } }); }

Анастасия
Ну я и говорю, в корутинах нельзя просто вызвать б...

сорян, я весь тред не прочитал, но у Вас фундаментальное заблуждение вот здесь в корутинах нельзя просто вызвать блокирующее чтение файла, например, она должна саспенд вернуть, а так мы просто поток заблочим, в отличии от виртуальных потоков, где просто контекст переключится на другой поток, в грин тредах тоже нельзя вызывать блокирующие вызовы. В луме, каааажется, хотят все такие блокирующие операции заменить на аналог саспенда, это может помочь, но что грин треды, что корутины, все работают поверх обычных потоков и если он ушёл в сон или сидит на ожидании сокета, то все корутины/виртуальные треды страдают от этого, ибо в пуле потоков -1 рабочая лошадка

Анастасия
Ну вот же. Не заблокирует реальный поток. Результа...

в этом примере, как я понимаю, Thread.sleep(1000) - это не настоящий слип, это что-то вроде SchedulerExecuter.schedule(this, 1000, MILLISECONDS)

Анастасия
Ну вот же. Не заблокирует реальный поток. Результа...

можно слип поменять на блокирующую запись в диск, чтоб пример поинтереснее был

Анастасия- Автор вопроса
Ivan Stop War in 🇺🇦
сорян, я весь тред не прочитал, но у Вас фундамент...

Ну понятно, что они исполняются на реальных потоках, но нам от этого никакой разницы, для нас это обычный синхронный код, виртуальный поток заблокирются, его вытеснят, пока он не проснется и все, у них же даже в key takeways написано: Blocking a virtual thread is cheap — be synchronous!

Анастасия
Ну понятно, что они исполняются на реальных потока...

согласен с ребятами выше. Там где они смогут проработать методы, чтобы они так работали, как вы говорите, там получится, но если это просто какой-то левый метод, который, условно, "не готов" к работе с такими гринтредами, то жди беды

Анастасия- Автор вопроса
Ivan Stop War in 🇺🇦
согласен с ребятами выше. Там где они смогут прора...

А как может метод не быть готовым к работе с гринтредами, jvm контроллирует все взаимодействие между ос и приложением, просто везде будут виртуальные потоки.

Анастасия
А как может метод не быть готовым к работе с гринт...

Да, насколько я видел, они заменяют имплементации сетевые, с файловой системой, тот же thread.sleep. поэтому в идеальной ситуации мы получим как в го

Анастасия
Ну вот же. Не заблокирует реальный поток. Результа...

Потому что это не блокирующий вызов в виртуальном треде

Ivan Stop War in 🇺🇦
в этом примере, как я понимаю, Thread.sleep(1000) ...

Там в луме для виртуальных потоков это по сути аналог корутиновского delay()

Dima
это ложь

Правда, даже Елизаров так говорил

Dima
пруфы

Завтра, я телефона и хочу спать

Анастасия
Ну я и говорю, в корутинах нельзя просто вызвать б...

Забудьте про корутины, после выхода loom у них останется узкая ниша оркестрации для тех кому лень жонглировать фьючерами или реактивными пайплайнами

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта