При запуске следующего кода на четырехъядерном процессоре я уверен, что эти четыре потока будут запущены на четырех разностных ядрах?C++ Многопоточность в многоядерной системе
Или ОС может разместить несколько потоков на одном ядре в зависимости от рабочей нагрузки системы. Если это так, запуск нескольких потоков может даже дать вам штрафы за производительность из-за переключения контекста и других накладных расходов.
Я полагаю, что нет способа закодировать приложение, которое заставляет потоки запускаться на разных ядрах?
int main()
{
std::vector<std::thread> threads(3);
for (size_t i = 0; i < 3; i++)
{
threads[i] = std::thread(DoSomethingLengthy);
}
DoSomethingLengthy();
for (auto& thread : threads)
{
thread.join();
}
}
Здесь есть два вопроса ... – KiaMorot
Сначала прочитайте о [аффинности процессора] (http://en.wikipedia.org/wiki/Processor_affinity). И чтобы ответить на ваш вопрос: если вы не «привязываете» поток к определенному ядру, это зависит от операционной системы, в которой ядро запускает ваш поток. Операционная система может даже менять ядро несколько раз за время, когда поток активен. –
У вас нет таких гарантий, вы должны конкурировать с любыми другими программами, запущенными на машине. Это * не * проблема, и особенно не нужна какая-либо помощь, операционные системы неизменно знают, как это сделать хорошо. –