СУПЕР-ВОПРОС ЗНАТОКАМ C/C++
Как узнать через код на Си, запущены ли дочерние потоки одного процесса на разных процессорах или ядрах процессора, или их работу эмулирует всего один процессор или ядро? И как вы это понимаете, когда тестируете свои исходники?
C/C++
Как узнать, что дочерние потоки процесса запущены на разных процессорах или ядрах процессора?
Не ковырял особо хлам на подобие Windows, да и не интересно.
А вот в unix-подобных ОС всё не так сложно понять.
Исходя из того, что в многоядерных процессорах есть деление ядер по мощности и классу, ядро Unix-подобных ОС распределяет наиболее загруженные процессы и их потоки на ведущие (более мощные) ядра. Менее нагруженные процессы с их потоками передает в ядра среднего и наименьшего класса. Поток с графикой, как известно, отрабатывает на интегрированном или отдельном графическом процессоре или ядре.
Обычные компы давно уже 2-х или много процессорные. Значит процессы и потоки, кроме ядер, могут бродить и между процессорами.
Гаджеты типа смартфонов обычно однопроцессорные и многоядерные, с отдельным графическим процессором. Тут понять не сложно, что и где примерно будет исполняться.
А вот в unix-подобных ОС всё не так сложно понять.
Исходя из того, что в многоядерных процессорах есть деление ядер по мощности и классу, ядро Unix-подобных ОС распределяет наиболее загруженные процессы и их потоки на ведущие (более мощные) ядра. Менее нагруженные процессы с их потоками передает в ядра среднего и наименьшего класса. Поток с графикой, как известно, отрабатывает на интегрированном или отдельном графическом процессоре или ядре.
Обычные компы давно уже 2-х или много процессорные. Значит процессы и потоки, кроме ядер, могут бродить и между процессорами.
Гаджеты типа смартфонов обычно однопроцессорные и многоядерные, с отдельным графическим процессором. Тут понять не сложно, что и где примерно будет исполняться.
В самом общем случае не недо это узнавать, надо изначально предполагать, что на разных. Потому что, как было сказано выше, ОС сама решает, где и что поедет и может менять эти решения прямо в процессе работы в зависимости от загрузки ядер.
Но можно разрешить процессу и/или потоку работать только на одном ядре, более того - указать на каком именно. Далее читаем MSDN по теме
SetProcessAffinityMask и SetThreadAffinityMask и наслаждаемся...
Но можно разрешить процессу и/или потоку работать только на одном ядре, более того - указать на каком именно. Далее читаем MSDN по теме
SetProcessAffinityMask и SetThreadAffinityMask и наслаждаемся...
Евген Вычужанин
всё это объяснение подходит только для виндовозера, ибо ничего другого мягкософт не показывает, чтобы юзеры поменьше знали и больше платили за допвозможности и допинформацию, например, в виде платных курсов и получения сертификата от Microsoft. В nix-ОС все открыто и более прозрачно. Открой книгу по Linux API и прочитай, со схемами, таблицами и примерами исходников для применения нужных системных команд и функций.
Во первых процесс может спокойно плавать между ядрами, это часть многозадачности.
Можно ограничить ядра, на которых может работать процесс (в том числе до одного). К примеру вот: https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-getprocessaffinitymask
Можно ограничить ядра, на которых может работать процесс (в том числе до одного). К примеру вот: https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-getprocessaffinitymask
СУПЕР ОТВЕТ: Разбери процессор, посмотри сколько ядер у него, по другому ни как)
Похожие вопросы
- Как запустить процессы, чтобы они работали пока программа не закрыта? с++
- Передача данных в дочернюю программу и вывод из неё
- Как компилятор будет обрабатывать код если процессор не поддерживает не которые написаные команды в коде?
- Ошибка компиляции ядра
- Почему создатель Linux Линус Торвальдс называет C++ ужасным языком, а ядро ОС Linux пишется только на Си?
- Есть структура, где много различных полей, в т. ч. типа string. Как потоком читать из файла в структуру данные? Возникает
- Перегрузка операторов ввода-вывода для файловых потоков
- В чём заключается ошибка? (не могу запустить код)
- "Фибер, поток, корутина" в чем разница между ними?
- С++ как запустить эту программу в консоли компьютера? Можете подробно объяснить?