Разные потоки планируются с разными политиками - PullRequest
0 голосов
/ 03 марта 2019

В POSIX api для планирования потоков у нас могут быть разные потоки с разными политиками планирования.

Пример:

pthread_attr_setschedpolicy (&attr, SCHED_FIFO); // set policy first in first out
pthread_create(&tid1,&attr,runner,NULL);  // create thread with first in first out
pthread_attr_setschedpolicy (&attr, SCHED_RR);  // set policy round robin
pthread_create(&tid2,&attr,runner,NULL);  // create thread with round robin

На мой взгляд, все потоки должны следовать общей политике планирования (пожалуйста,поправьте меня если я ошибаюсь) то как работает приведенный выше код?

1 Ответ

0 голосов
/ 04 марта 2019

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

Для SCHED_FIFO, как только поток достигаетГлава списка с заданным приоритетом останется там, пока не заблокирует или не уступит.Для SCHED_RR работающий поток, который превысил свой максимальный квант времени, будет перемещен в конец списка для его статического приоритета.

...