Как виртуальный поток узнает, что его операция блокировки завершилась?

Насколько я понимаю, виртуальный поток на самом деле является «задачой», а не потоком. Виртуальный поток выполняется потоками-носителями внутри ForkJoinPool. Когда виртуальный поток сталкивается с блокировкой ввода-вывода и переходит в состояние ожидания, он прекращает свою работу и сохраняет кадр стека в куче. Поток-носитель, который фактически выполнял задачу, теперь свободен для выполнения других задач. Это действие называется «размонтировать». Когда блокирующий ввод-вывод будет завершен, виртуальный поток, который был размонтирован, будет ждать в очереди несущего потока с его кадром стека, хранящимся в куче, чтобы возобновить работу, а когда придет его очередь, работа возобновится. Это действие называется «монтирование».

Мне интересно, как можно обнаружить завершение операции блокировки, когда на самом деле ее не ожидает ни один поток.

0 ответов

Другие вопросы по тегам