Spec-Zone .ru
спецификации, руководства, описания, API

8.11.6.2. Работа Пула потоков

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

Число групп потока является конфигурируемым использованием thread_pool_size системная переменная. Число значения по умолчанию групп 16. Для направляющих линий при установке этой переменной см. Раздел 8.11.6.3, "Настройка Пула потоков".

Максимальное количество потоков на группу 4096 (или 4095 на некоторых системах, где один поток используется внутренне).

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

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

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

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

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

Максимальное количество потоков, которые могут произойти, является суммой max_connections и thread_pool_size. Это может произойти в ситуации, где все соединения находятся в режиме выполнения, и дополнительный поток создается на группу, чтобы прислушаться к большему количеству операторов. Это - не обязательно состояние, которое часто происходит, но это теоретически возможно.