Комментарии 4
Ну то есть корутины из Котлина. Главный плюс (и он же по идее минус) - семантика вызовов наподобие Thread.sleep меняется в зависимости от того в настоящем потоке он выполняется или в легком.
В случае
VirtualThread.sleep()
, вы пометите виртуальный поток как спящий и создадите запланированную задачу на старой доброй Java (на основе потоков ОС)ScheduledThreadPoolExecutor
. Эта задача распаркует / возобновит ваш виртуальный поток по истечении заданного времени
что-то мне кажется, это не то что происходит во время выполнения sleep. я думаю, что sleep помечает тред как доступный для диспетчеризации корутин в него. никаких ScheduledTask не должно создаваться при этом.
Проблема реальных приложений заключается в том, что они делают глупые вещи, например, обращаются к базам данных, работают с файловой системой, выполняют вызовы REST или обращаются к каким-то очередям/попотокам.
Хммм... А вы уверены, что это глупые вещи? А что же тогда умные?
В статьях про хаскель в этом месте любят говорить про сайд-эффекты. Типа, вот у нас чистые функции, которые понятны, просты, их компилятор может вычислять каждый раз или закешировать (или вычислять лениво).. Но все это по идее должно исчезнуть, когда программа делает I/O или запрос к БД. Это что-то, что делать в реальности необходимо, но что само по себе быстро ломает стройность картины.
Я думаю, здесь "глупые" нужно понимать в смысле "грязных функций" или сайд-эффектов.
Представление Project Loom в Java