Рубрики
Без рубрики

Потоки Java дешевы! Давайте создадим миллионы из них

Фото Адитьи Вардханы на Unsplash Потоки Java дешевы. Да, вы меня правильно расслышали. С фейгом… С тегами java, project loom, потоки, виртуальные потоки.

Фото Адитьи Вардханы на Unsplash

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

Отказ от ответственности: в этой статье я не буду объяснять, как работает поток и виртуальный поток, и основную концепцию; скорее, я продемонстрирую, что мы можем создавать миллионы виртуальных потоков с помощью project loom.

Потоки есть везде в java. Например, в большинстве веб-приложений Java мы назначаем поток для обработки пары запросов/ответов. Каждый запрос/ответ независимы. По запросу сервер анализирует запрос, при необходимости выполняет запрос по базе данных и отправляет ответ. Это просто и легко. Не имеет значения, сколько из них обслуживается; модель программирования одна и та же и простая.

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

Давайте проведем эксперимент и выясним, сколько потоков мы можем создать в приложении java.

package com.bazlur;

import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.LockSupport;

public class ThreadCreationDemo {
 public static void main(String[] args) {
  var counter = new AtomicInteger();
  while (true) {
   new Thread(() -> {
    var count = counter.incrementAndGet();
    System.out.println("count = " + count);
    LockSupport.park();
   }).start();
  }
 }
}

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

Используя свой компьютер*, я смог создать 4058 потоков , а затем приложение вышло из строя.

Как вы можете видеть, мы ограничены в том, сколько потоков мы можем создать и использовать в приложении.

В последнее время разрабатывается новый проект под названием project loon, который решит это ограничение. Используя его, мы можем буквально создавать миллионы виртуальных потоков.

Я сделаю аналогичный опыт, используя project loom здесь и сейчас-

package com.bazlur;

import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.LockSupport;

public class VirtualThreadCreationDemo {
 public static void main(String[] args) {
  var counter = new AtomicInteger();

  while (true) {
   Thread.builder().virtual().task(() -> {
    var threadCount = counter.incrementAndGet();
    System.out.println("count = " + threadCount);
    LockSupport.park();
   });
  }
 }
}

Используя приведенный выше код, я смог создать более 4 миллионов виртуальных потоков .

Ключевыми различиями между потоками и виртуальными потоками являются –

  • Виртуальные потоки – это просто обычный поток – в коде, среде выполнения, а также дублирующий и профиль. Это означает, что разработчикам не нужно изучать что-то новое.
  • Виртуальный поток – это не оболочка вокруг потока операционной системы, а сущность java.
  • Виртуальный поток очень дешевый.

Если вы хотите узнать больше о проекте look, вот ресурсы-

Если вы хотите узнать больше о проекте look, вот ресурсы- https://wiki.openjdk.java.net/display/loom/Main

Конфигурация компьютера: MacBook Pro (15 дюймов, 2019), 8-ядерный процессор Intel Core i9 с частотой 2,3 ГГц, 16 ГБ памяти.

Это сообщение, первоначально опубликованное в Потоки Java дешевы! Давайте создадим миллионы из них | LinkedIn

Оригинал: “https://dev.to/bazlur_rahman/java-threads-are-cheap-let-s-create-millions-of-them-24cm”