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

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

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

29 ответов

22 просмотра

Про какие именно блокирующие операции? В корутинах все сделано в расчете на 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 у них останется узкая ниша оркестрации для тех кому лень жонглировать фьючерами или реактивными пайплайнами

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

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

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
И никого не интересует какие пакеты кто использует. ((% Заходишь на сайт симфони и видишь поддержку Украины - по законам РФ это ж экстремизм. Только никто не отказывается от с...
Am Ambrion
11
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Чтобы перехватить все нажимания буков на форме, надо хук ставить? Пробовал на форме ОнКейДаун, оно ловит клаву если фокус не на компоненте с вводом текста
Serjone
15
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
7
Народ! Впервые клиенту пришло письмо от РКН, у вас, дескать, есть яндекс метрика, а нигде не написано, что вы ее юзаете. Никто не сталкивался?
Sasha Beep
14
Всем привет! вывожу на общей стр дочерние ресурсыв каждом ресурсе галерея, и первая фотка должна выводиться на общей [!DocLister? &prepare=photo !]
Alekso
12
Я правильно понимаю что нет способов получить список ожидающих заявок на вступление в группу с помощью бота из mtproto?
Шамиль Прилов
7
А можно вопрос? Мне сегодня сказали что у меня функция (которая просто заполняет массив значениями) не правильная void Full(double * arr, int n) { for (int i = 0; i < n; i...
† C E †
7
Добрый вечер. Хочу чтобы у меня в классе поле было функцией, которая возвращает строку. Делаю так: interface ... TGetOutPath = function : String of object; ... protec...
Kirill Filippenok
12
Карта сайта