Как Threadpool повторно использует streamи и как это работает

Мои концепции многопоточности слабы и стараются учиться.

В java, что я знаю, мы не можем назвать Thread более чем один раз, т.е.

Thread t = new Thread(//Some Runnable); t.start() t.start() //Illegal and throw Exception at Runtime. 

Насколько я знаю, он вызывает исключение, когда вы вызываете t.start () снова, потому что связанный стек для Thread уничтожается, когда он выходит из метода run() и вы пытаетесь снова инициализировать вещи.

В этом случае то, что я знаю о Threadpool, дает лучшую производительность и экономит время, потому что нет необходимости создавать новый stream. (Я читал в http://www.javatpoint.com/thread-pooling-in-java )

если нет необходимости создавать новый Thread в сценарии ThreadPool, то как он работает с тем же streamом, который только что закончил свой метод запуска, будет ли этот Thread снова использоваться?

Я прочитал это, http://docs.oracle.com/javase/tutorial/essential/concurrency/pools.html, и он говорит, что « большинство реализаций исполнителей в java.util.concurrent используют пулы streamов, которые состоят из рабочих streamов Этот вид streamа существует отдельно от задач Runnable и Callable, которые он выполняет, и часто используется для выполнения нескольких задач ».

Итак, что такое Worker thread, это что-то другое, чем обычные Java-streamи?

с этой ссылкой. Как пул кэшированных streamов пула. Существующие streamи. Я получил что-то, но все еще смущен тем, какие вещи можно устранить, когда мы используем пул streamов и который дает лучшую производительность, а затем использует обычный Java-stream.

Так можно сказать так:

Резьба состоит из трех частей,

  1. Создание (сообщите ОС, что это новый stream, создайте для него стек).
  2. Выполнить Runnable ie run ().
  3. Уничтожение streamов.

Итак, рассмотрев выше 3 шага, с шагами 1 и 3 можно избавиться от фиксированного числа создания темы. только шаг 2 для каждой задачи будет выполнен, поэтому Threadpool быстрее? можем ли мы так сказать? я прав?

Если нет необходимости создавать новый Thread в сценарии ThreadPool, то как он работает с тем же streamом, который только что завершил свой метод запуска, будет ли этот Thread снова использоваться?

Простой – исходная нить никогда не завершается. Он просто ждет выполнения другой задачи. В псевдокоде:

 // No, this isn't even slightly accurate! General impression only :) while (!pool.isShutdown()) { Runnable task = pool.waitForTaskOnQueue(); task.run(); } 

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

Процесс работает в двух частях:

Представление задачи: пулы streamов тесно связаны с блокирующей очередью. Когда мы говорим execute.execute (runnable). Выполняемая / вызываемая в очереди очередь.

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

Таким образом, есть streamи, которые будут запускать бесконечный цикл и наблюдать за очередью задач. Как только задачи будут доступны, один stream выберет его и выполнит.

Итак, рассмотрев выше 3 шага, с шагами 1 и 3 можно избавиться от фиксированного числа создания темы. только шаг 2 для каждой задачи будет выполнен, поэтому Threadpool быстрее? можем ли мы так сказать? я прав?

Да вы правы. Создание и уничтожение нитей – одна из дорогостоящих задач. Как и в streamе streamа, streamи уже созданы, поэтому накладных расходов на создание streamов нет. Но если у вас гораздо более высокие streamи, чем должно было быть, это будет очень плохо для вашего приложения. Это может быть OutofMemorry или может быть в некоторых других проблемах. Поэтому, чтобы исправить размер пула streamов, используйте приведенную ниже формулу:

no of threads = 2 * no_of_cores * no_of_disks * percentage CPU utilization you need * (1 + (W/ C))

(W / C) – это доля, указывающая время ожидания для вычисления времени.

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

Вы можете ограничить определенное количество параллельных streamов в пуле, что полезно для предотвращения перегрузки. Если все streamи заняты задачами, новые задачи помещаются в очередь, ожидая появления streamа

  • Параметры TaskCreationOptions.LongRunning и ThreadPool
  • Как я могу отключить пулы исполнителей / планировщиков Spring Spring до того, как все остальные бобы в веб-приложении будут уничтожены?
  • В чем смысл гибкости streamов в ASP.Net?
  • Как создать пул streamов, используя boost в C ++?
  • Пул streamов C ++
  • Как реализовать PriorityBlockingQueue с помощью ThreadPoolExecutor и настраиваемых задач
  • Пул streamов с использованием boost asio
  • Ограничивающие streamи пула streamов C #
  • Код для простого пула streamов в C #
  • Что такое эквивалент async / await сервера ThreadPool?
  • Использование ThreadPool.QueueUserWorkItem в ASP.NET в сценарии с высоким трафиком
  • Interesting Posts

    Можно ли сделать Ctrl + C восприимчивым, как Ctrl + Break в консоли Windows 7?

    Что происходит с глобальными и статическими переменными в общей библиотеке, когда она динамически связана?

    Как я могу читать SMS-сообщения с устройства программно в Android?

    Сравнение строк и преобразование строк в Java

    Как обнаружить клики системы «Недавние приложения» (Honeycomb +)

    Исключить ошибку сегментации записи в shellcode

    Как получить версию Android sdk?

    Каковы могут быть причины отказа отказались?

    Рекомендуемые значения для параметров OpenCV detectMultiScale ()

    Java: лучший способ итерации через коллекцию (здесь ArrayList)

    Тестовые этикетки для регрессионного кофе, поплавок не допускаются?

    Сделать DocumentBuilder.parse игнорировать ссылки DTD

    Можно ли использовать бинарный литерал в C или C ++?

    Отрицательное сопоставление с использованием grep (строки соответствия, которые не содержат foo)

    Как удалить папку, которая используется?

    Давайте будем гением компьютера.