Как Pthreads на Linux рассматриваются планировщиком
-
25-09-2019 - |
Вопрос
У меня вопрос относительно реализации 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.