Как видно из двух других ответов, идеальная политика планирования варьируется в зависимости от того, какую деятельность выполняют потоки.
Потоки, работающие с совершенно разными данными, выигрывают от большего разделения. Эти потоки в идеале должны планироваться в отдельных доменах NUMA и физических ядрах.
Потоки, работающие с одними и теми же данными, выиграют от локальности кэша, поэтому идея состоит в том, чтобы планировать их близко друг к другу, чтобы они совместно использовали кэш.
Потоки, которые работают с одними и теми же данными и испытывают большое количество остановок конвейера, выигрывают от совместного использования ядра с гиперпоточностью. Каждый поток может работать до тех пор, пока не остановится, после чего другой поток может работать. Потоки, которые работают без остановок, страдают только от гиперпоточности и должны работать на разных ядрах.
Принятие идеального решения о планировании зависит от сбора данных и принятия решений. Большая опасность в дизайне ОС состоит в том, чтобы сделать планирование потоков слишком умным. Если операционная система тратит много процессорного времени, пытаясь найти идеальное место для запуска потока, это напрасная трата времени, которое она может использовать для запуска потока.
Поэтому часто эффективнее использовать упрощенный планировщик потоков и, если необходимо, разрешить программе указывать свою собственную политику. Это настройка привязки потока.