Project Loom представляет облегченную конструкцию параллелизма в Java. Основная цель Project Loom - поддержка высокопроизводительной и облегченной модели параллелизма в Java.

Проблемы с текущей моделью параллелизма Java:

Мы уже знали, что текущая модель параллелизма Java использует потоки уровня ядра операционной системы. давайте посмотрим на некоторые проблемы с текущей моделью.

Проблема 1: Ожидание цепочек или блокирование цепочек.

Мы уже знали, что если поток блокируется до тех пор, пока поток не будет заблокирован из-за операций ввода-вывода, мы не используем ЦП или циклы ЦП тратят впустую, поэтому мы не используем ЦП эффективно.

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

Проблема 2: создание большего количества потоков может вызвать сбой JVM (нехватка памяти):

Создание потока требует времени и примерно 1 МБ памяти. поэтому мы начинаем создавать больше потоков, это может вызвать сбой JVM, который зависит от памяти, предоставленной JVM.

Как мы можем решить две вышеупомянутые проблемы:

Есть две проблемы, которые мы можем решить:

  1. Реактивное программирование:

Реактивное программирование работает в соответствии с концепциями цикла событий, которые никогда не блокируются или не должны выполнять какие-либо блокирующие операции в цикле событий. Он использует очереди событий, поэтому любая операция ввода-вывода помещается в очередь (обратные вызовы помещаются в очередь), чтобы основной поток не блокировался и всякий раз, когда поток получает ответ и выполняется основным потоком или циклом событий.

2. Использование сопрограмм:

Он вводит потоки пользовательского уровня или режима, которые полагаются на реализацию продолжений и планировщиков среды выполнения Java, а не на реализацию ОС .

В настоящее время реализация java полагается на планировщики уровня ядра, продолжение и потоки. Итак, допустим, если поток заблокирован из-за некоторой операции ввода-вывода, чтобы приостановить продолжение, необходимо сохранить весь стек вызовов. И аналогично получить стек вызовов при возобновлении.

В Java нет контроля над потоками. ЦП обрабатывает все запросы одинаково, и, следовательно, мы не можем контролировать, поэтому нет уверенности, что один и тот же запрос отправляется на тот же процессор, что очень маловероятно.

Чтобы получить контроль над планированием потоков, нам потребовались потоки уровня приложения или пользователя, продолжение (также известное как задача) и планировщик.

Планировщики волокон:

  • Для достижения этого требуются планировщики, которые могут контролировать волокна и планировать задачи в потоках уровня ОС.
  • Заботится о монтировании и размонтировании задачи (из-за ввода-вывода).
  • Во время операции ввода-вывода продолжайте выполнение других задач.
  • Продолжите ту же задачу, с которой он остался во время операции ввода-вывода.

Преимущества перед потоками:

  1. Очень легкий
  2. Занимает всего несколько КБ стека по сравнению с Thread (занимает около 1 МБ)
  3. Может работать с миллионами волокон в приложении.
  4. Серверы больше не могут обрабатывать одновременные соединения.
  5. Эффективное использование ЦП

Удачного обучения.

Спасибо