Я не вижу, что есть случай для этого.
Помните, что любая ОС с многопроцессорной поддержкой автоматически выделяет процессорное время, как он считает нужным, чтобы сбалансировать загрузку процессора.
Это означает, что на самом деле любой поток процесса, который у вас запущен, будет постоянно прерван на основе приоритета потока, чтобы ОС могла выделять время процессора другим процессам. Отдельные вычисления внутри одного потока могут даже не выполняться на одном процессоре.
Если вы исправили код процесса для работы только с одним указанным процессором, это, скорее всего, помешало бы его производительности, поскольку это не позволяло ОС балансировать загрузку процессора.
Я полагаю, что вы могли бы сделать большую часть его критической секцией, но это помешает вашему приложению в других областях, особенно обработке любых подвязок.
Если вы на самом деле не используете нить на ядро (что кажется маловероятным), то эффект переключения ядер будет очень похож на эффект переключения контекста на том же ядре. –
Ну, нет, контекстные переключатели не обязательно будут иметь одинаковый эффект. Да, если кэш полностью (или значительно) пополняется новыми данными к моменту возобновления «исходного» потока, тогда коммутатор контекста и основной коммутатор будут иметь аналогичный эффект. Однако это не обязательно так. Кроме того, ваше предположение о том, что один поток на одно ядро маловероятен, неверен. Для большинства потоков в системе довольно часто, когда только один (или несколько) фактически что-то делает. Таким образом, в 99% случаев вы можете запустить только один поток на ядро. –