Могу ли я уточнить проект Loom?
Брайан Гетц вдохновил меня на проект Loom, и, чтобы в полной мере оценить его, мне потребуются некоторые разъяснения относительно статус-кво.
Мое понимание таково: в настоящее время, чтобы иметь реальный параллелизм, нам нужно иметь поток на процессор/ядро; 1) есть ли смысл иметь n+1 потоков на n-ядерной машине? Project Loom предоставит нам практически безграничные потоки/волокна, полагаясь на jvm для выполнения задачи в виртуальном потоке внутри JVM. 2) Будет ли это действительно параллельно? 3) Чем конкретно это будет отличаться от вышеупомянутого сценария «n+1 потоков на n-ядерной машине»?
Спасибо за ваше время.
1 ответ
Виртуальные потоки допускают параллелизм (с привязкой к вводу-выводу), а не параллелизм (с привязкой к ЦП). Они представляют причинную одновременность, но не одновременность использования ресурсов.
На самом деле, если два виртуальных потока находятся в состоянии привязки ввода-вывода* (например, ожидая возврата из вызова REST), то ни один поток вообще не используется. Принимая во внимание, что использование обычных потоков (если не используется реактивная или завершаемая семантика) будет заблокировано и недоступно для использования до тех пор, пока вызовы не будут завершены.
*За исключением определенных условий (например, использование синхронизации с ReentrackLock, блокировка, возникающая в собственном методе, и, возможно, некоторые другие второстепенные области).