как pthreads в linux видят планировщик - PullRequest
5 голосов
/ 23 октября 2010

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

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

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

Ответы [ 3 ]

7 голосов
/ 23 октября 2010

Для современного Linux (реализация NPTL pthread) планировщик планирует потоки, а поток считается «облегченным процессом». pthread_create реализован в терминах системного вызова clone.

2 голосов
/ 23 октября 2010

Linux планирует каждый поток, как если бы он был процессом с областью действия как PTHREAD_SCOPE_SYSTEM.Реализация nptl может использовать несколько процессоров.

1 голос
/ 05 ноября 2011

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

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

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

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

...