Могу ли я уточнить проект Loom?

Брайан Гетц вдохновил меня на проект Loom, и, чтобы в полной мере оценить его, мне потребуются некоторые разъяснения относительно статус-кво.

Мое понимание таково: в настоящее время, чтобы иметь реальный параллелизм, нам нужно иметь поток на процессор/ядро; 1) есть ли смысл иметь n+1 потоков на n-ядерной машине? Project Loom предоставит нам практически безграничные потоки/волокна, полагаясь на jvm для выполнения задачи в виртуальном потоке внутри JVM. 2) Будет ли это действительно параллельно? 3) Чем конкретно это будет отличаться от вышеупомянутого сценария «n+1 потоков на n-ядерной машине»?

Спасибо за ваше время.

1 ответ

Виртуальные потоки допускают параллелизм (с привязкой к вводу-выводу), а не параллелизм (с привязкой к ЦП). Они представляют причинную одновременность, но не одновременность использования ресурсов.

На самом деле, если два виртуальных потока находятся в состоянии привязки ввода-вывода* (например, ожидая возврата из вызова REST), то ни один поток вообще не используется. Принимая во внимание, что использование обычных потоков (если не используется реактивная или завершаемая семантика) будет заблокировано и недоступно для использования до тех пор, пока вызовы не будут завершены.

*За исключением определенных условий (например, использование синхронизации с ReentrackLock, блокировка, возникающая в собственном методе, и, возможно, некоторые другие второстепенные области).

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