Какова стоимость производительности переключателя процессов Win32? - PullRequest
0 голосов
/ 20 января 2010

Я знаю, что стоимость переключения контекста физического потока Win32 оценивается в 2-8 тыс. Циклов. Какие-нибудь оценки стоимости переключения процесса?

Ответы [ 2 ]

0 голосов
/ 27 августа 2010

Цитата из " Windows Internals 5Ed ":

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

Windows расписаний в потоке зернистость. Этот подход имеет смысл если учесть, что процессы не бежать, но только обеспечить ресурсы и контекст, в котором работают их потоки. Потому что решения по планированию принимаются строго по нитке, нет учитывается, какой процесс нить принадлежит. Например, если процесс А имеет 10 выполняемых потоков, процесс B имеет 2 выполняемых потока и все 12 потоков одинаковы приоритет, каждый поток будет теоретически получают одну двенадцатую часть процессорное время - Windows не даст 50 проценты процессора для обработки А и 50 процентов к процессу Б.

...

Контекст потока и процедура для переключения контекста меняются в зависимости на архитектуре процессора. типичное переключение контекста требует сохранения и перезагрузить следующие данные: A. Указатель инструкций B. Стек ядра указатель C. указатель на адрес пространство, в котором работает поток ( каталог таблицы страниц процесса). Ядро сохраняет эту информацию из старая нить, толкая ее на текущий (старый поток) режим ядра стек, обновление указателя стека и сохранение указателя стека в старом блок KTHREAD потока Ядро указатель стека затем устанавливается на новый стек ядра потока и новый контекст потока загружен. Если новый поток находится в другом процессе, это загружает адрес своей таблицы страниц каталог в специальный процессор зарегистрироваться, чтобы его адресное пространство имеется. Управление переходит к новой теме восстановленный указатель инструкции и новый поток возобновляет выполнение.

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

0 голосов
/ 20 января 2010

Вместо того, чтобы просить оценки, я бы проверил это. Начните с такой программы, как:

#include <windows.h>

int main() { 
    for (int i=0; i<1000000; i++)
        Sleep(0);
    return 0;
}

Затем создайте родительскую программу, которая порождает (скажем) 32 копии этого, а затем использует WaitForMultipleObjects, чтобы дождаться их завершения. Измерьте время (стены) от начала до конца и разделите на общее количество переключателей процесса. Конечно, вы хотите работать в относительно спокойной системе, чтобы получить значимый результат.

...