Когда поток простаивает?



Что мы подразумеваем под неработающим потоком? И когда это происходит?
Контекст: ThreadPoolExecutor-он говорит, что даже если есть простой поток, если corePoolSize мал, создается новый поток

622   4  

4 ответов:

В этом контексте простаивающий поток является тем, который принадлежит/удерживается ThreadPoolExecutor и в настоящее время не выполняет никаких запускаемых/вызываемых потоков.

Когда работа передается в TPE, и если выбран простаивающий поток, то он становится активным и запускает Runnable/Callable. Как только запускаемый/вызываемый поток завершается, поток возвращается к простаиванию (но может немедленно стать активным снова, если есть больше работы, и TPE выбирает использовать этот теперь доступный поток).

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

Ну в контексте пула потоков это означает, что он создан, но не запущен; ожидает запуска заданий. Это означает, что даже если потоков больше, чем требуется для выполнения заданий, могут быть созданы новые потоки, а не тот случай, когда требуется отправить новое задание, но нет доступных потоков. Конечно, это идет до предела; также это зависит от конфигурации.

Что мы подразумеваем под неработающей нитью?

Неработающий поток: рабочие потоки не работают, если они не выполняют никаких задач.

Когда это происходит?

Когда поток завершил выполнение текущей задачи или не имеет задачи для выполнения, он становится неактивным.

CorePoolSize: Чтобы сохранить по крайней мере эти многочисленные потоки доступными для обработки задач. Это сокращает время ожидания для начального набора задач, когда потоки corePoolSize простаивают или если corePoolSize предел не был достигнут

Основные и максимальные размеры пула:

ThreadPoolExecutor автоматически настроит размер пула (см. getPoolSize ()) в соответствии с границами, установленными corePoolSize (см. getCorePoolSize ()) и maximumPoolSize (см. getMaximumPoolSize ()). Когда новая задача передается в методе execute (java.яз..Runnable), и выполняется меньше потоков corePoolSize, создается новый поток для обработки запроса, даже если другие рабочие потоки простаивают. Если количество запущенных потоков больше corePoolSize, но меньше maximumPoolSize, новый поток будет создан только в том случае, если очередь заполнена. Установив одинаковые значения corePoolSize и maximumPoolSize, вы создадите пул потоков фиксированного размера. Установив maximumPoolSize в существенно неограниченное значение, такое как Integer.MAX_VALUE, вы позволяете пулу разместить произвольное количество параллельных задач. Как правило, основные и максимальные размеры пула устанавливаются только при строительстве, но они также могут быть изменены динамически используя setCorePoolSize (int) и setMaximumPoolSize(int).

Comments

    Ничего не найдено.