Как Pthreads на Linux рассматриваются планировщиком

StackOverflow https://stackoverflow.com/questions/4004662

Вопрос

У меня вопрос относительно реализации Pthread на Linux.

Предположим, что процесс имеет 5 нитей. Теперь, как планировщик видит эти потоки (или вообще не видит). Например, когда вызывается планировщик, только планирует ли он основной процесс, а затем его включить основной процесс для расписания между каждым из его потоков.

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

Это было полезно?

Решение

Для современного Linux (внедрение NPTL Pthread), расписания планировщика потоков, поток считается «технологическим весом». pthread_create реализован с точки зрения clone Системный вызов.

Другие советы

Linux расписан каждый поток, как если бы это процесс с объемом в виде Pthread_scope_system. Реализация NPTL может использовать несколько процессоров.

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

Однако, если вы хотите, чтобы вы могли использовать группы управления процессом Linux, чтобы вместо этого планировать группы потоков.

Группы контроля процессов делают планирование немного более неэффективным, но это может быть намного более справедливо.

Одним из употреблений, который стал очень популярным, является создание всех процессов и потоков, созданных каждым TTY, в контрольную группу на TTY. Это приводит к тому, что все графические приложения пользователя запланированы на одном уровне, что и его 24-нить ядра с компиляцией ядра, который запущен в окне терминала. Графические приложения получают 50%, а компиляция получает 50%. Если он открывает другое окно терминала и начинает компилировать GLIBC с еще 24 потоками, он сдвигается до 33% настольных приложений, 33% компиляции ядра и 33% компиляции Glibc.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top