Arhn - архитектура программирования

Что определяет активный поток?

Что в параллелизме Java делает поток «активным»? Только то, что он не работает на холостом ходу? Является ли «ожидающий» или «приостановленный» поток технически активным?

28.04.2012

  • В каком контексте появляется слово active? Это слишком общий термин, чтобы дать точное определение при таком небольшом количестве информации. 28.04.2012
  • Обычно допустимо иметь от 4 до 20 активных потоков на ядро. 28.04.2012
  • Активный поток java — это поток, который имеет право быть текущим исполняемым потоком. Это поток, который вышел из нового состояния и достиг (или повторно достиг) рабочего состояния. Активные потоки размещаются в пуле исполняемых потоков. Распространенной ошибкой является использование контекстно-зависимого термина active в качестве исполняемого потока, который выполняется в данный момент. 12.02.2014

Ответы:


1

Из того, что я могу сказать, термин «активный», кажется, используется много, но никогда не определяется. Метод ThreadGroup.enumerate() задокументирован для:

Копирует в указанный массив каждый активный поток в этой группе потоков и ее подгруппах.

и из исходника для этого, он проверяет Thread.isAlive() и добавляя их к перечислимому. Из этого я делаю вывод, что термины «активный» и «живой» взаимозаменяемы, а «живой» определяется как:

Поток жив, если он был запущен и еще не умер.

28.04.2012

2

Взгляните на java.lang.Thread.State

В других системах, отличных от Java, active означает «RUNNABLE». Задача/процесс/поток активны, если они могут активно выполнять код. Он приостанавливается, если он не (блокировка и т.

Как сказал Стивен С, здесь active используется скорее как английский, чем как Java.

28.04.2012

3

В этом контексте я понимаю, что «активный» означает, что они выполняют код. Неактивные потоки — те, которые заблокированы при вызовах ввода-вывода или ожидают блокировки — потребляют только ресурсы памяти, не затрагивая ЦП (или лишь незначительно).

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

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

Я настоятельно рекомендую книгу Java Concurrency in Practice для качественная трактовка темы параллельного программирования на Java.

28.04.2012

4

Слово «активный» используется здесь в обычном английском смысле.

Обычное английское значение слова active — «делать что-то». Таким образом, интуитивное значение «активного» для потоков состоит в том, что они фактически выполняются или готовы к выполнению.

В контексте этой цитаты:

"Обычно допустимо иметь от 4 до 20 активных потоков на ядро"

слово «активный» используется последовательно с этим, хотя я бы поспорил с цифрами. (20 слишком много, ИМО).

Однако я бы сказал, что это намеренно расплывчатое утверждение. Раздачами являются использование ласковой фразы «это общепринято» (вместо ссылки на какие-либо конкретные источники) и широкий диапазон («4–20»). Таким образом, вы можете сделать вывод, что слово «активный» является еще одним примером преднамеренной расплывчатости.

ИМО, автор цитаты пытается сделать общий вывод о том, что «слишком много потоков — это плохо» ... не уточняя, что такое «слишком много». Извлекать более точные указания, связывая то, что он подразумевает под «активным», бессмысленно. (И чтобы было ясно, невозможно сказать, сколько "слишком много"... вообще.)

28.04.2012

5

«Обычно допустимо иметь от 4 до 20 активных потоков на ядро». — Адам Тэннон

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

28.04.2012
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..