Pull to refresh

Comments 9

многопоточности и еvent loop... ? Шта?

ИИ так сказала

Статья - бред. По сути дела в том же C++ можно делать все возможные модели многозадачности, да хоть вытесняющую на прерываниях, если платформа позволяет.

Наверное, корректнее всё это назвать не многопоточностью, а многозадачностью. Потому что event loop однопоточный, но с натяжкой попадает под понятие кооперативной многозадачности.

Для полноты картины: в .NET потоки нативные; для параллельных вычислений могут создаваться руками или браться из пула, а в асинхронном выполнении всегда используется пул.

В 2023 году был большой эксперимент с зелёными потоками (которые ТС называет virtual threads), но идею в итоге отклонили из-за тормозов при вызове нативных и уже существующих асинхронных функций, а также из-за проблем с безопасностью.

Потом ещё был большой эксперимент по переносу асинхронности с уровня языка на уровень рантайма, и он умел успех, но внедрение этой фичи может занять ещё несколько лет.

У JVM короткие стеки, их быстро копировать при монтировании/размонтировании виртуального контекста в реальный. А основное преимущество VirtualThread – как раз в отсутствии дополнительной обвязки async'ами вы пишите/запускаете стандартный многопоточный Thread-код, даете ему VirtualThread Pool (хоть в легаси) и он исполняется теперь на VirtualThread. Это позволяет не ломать то, что уже есть, и оставаться жить в привычной "тредовой" модели исполнения воркеров, без новых конструкций наподобие реактивности.

Для полноты картины: в .NET ... в асинхронном выполнении всегда используется пул.

Нет, это зависит от контекста синнхронизации. Иначе бы async-методы в однопоточном контексте (к примеру, в приложениях для Windows Forms или же WPF) не могли бы работать с элементами управления GUI.

Всё так, я опустил частные случаи.

В какой-то момент забылся где я, на Хабре, или же читаю чат в chatgpt)

Sign up to leave a comment.

Articles