Планирование потоков Win32

Это больше похоже на проблему pivot, поэтому я использую pivot_table здесь

s=df.pivot_table(index=['PatientID','FName','LName','PName','PPhone'],columns='Ear',values=['Model#','SerNum'],aggfunc='first')
s.columns=s.columns.map(' '.join)
s.reset_index(inplace=True)
s
  PatientID FName LName     ...      Model# Right SerNum Left SerNum Right
0    P99999  John   Doe     ...               400     1234567      2345678
[1 rows x 9 columns]
13
задан JesperE 22 March 2009 в 15:29
поделиться

4 ответа

Планирование в Windows при гранулярности потока. Основная идея позади этого подхода состоит в том, что процессы не выполняют, но только обеспечивают ресурсы и контекст в который их выполненные потоки. Возвращаясь к Вашему вопросу, потому что решения планирования приняты строго на основе потока, никакое внимание не уделено, к какому процессу поток принадлежит. В Вашем примере, если процесс A имеет 1 выполнимый поток и процесс, B имеет 50 выполнимых потоков, и весь 51 поток в том же приоритете, каждый поток получил бы 1/51 процессорного времени — Windows не даст 50 процентов ЦП для обработки A и 50 процентов для обработки B. Для понимания алгоритмов планирования потоков необходимо сначала понять приоритетные уровни тот Windows использование. Можно относиться здесь за справочником.

Попытайтесь читать Windows Internals для того, чтобы подробно понять.

9
ответ дан 1 December 2019 в 23:16
поделиться

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

Windows Internals является замечательной книгой для получения дополнительной информации о планировщике потока Windows.

3
ответ дан 1 December 2019 в 23:16
поделиться

Все вышеупомянутое точно, но если Вы волнуетесь по поводу 50 процессов потока hogging весь ЦП, СУЩЕСТВУЮТ методы, которые можно сделать, чтобы гарантировать, что никакой единственный процесс не сокрушает ЦП.

По моему скромному мнению, лучший способ сделать это должно использовать объекты задания справиться с использованием процесса. Сначала назовите CreateJobObject, затем SetInformationJobObject для ограничения макс. использования ЦП процессов в объекте задания и AssignProcessToJobObject для присвоения процесса с 50 потоками к объекту задания. Можно затем позволить ОС гарантировать, что 50 процессов потока не используют слишком много процессорного времени.

5
ответ дан 1 December 2019 в 23:16
поделиться

Это зависит от поведения потоков. В целом с 50: 1 различие в количестве потока, да, приложение с большим количеством потоков собирается получить намного больше времени. Однако окна также используют динамическое установление приоритетов потока, которое может изменить это несколько. Динамическое установление приоритетов потока описано здесь:

http://support.microsoft.com/kb/109228

Соответствующая выборка:

Базовый приоритет потока является основным уровнем, от которого внесены эти восходящие корректировки. Текущий приоритет потока называют его динамическим приоритетом. Интерактивные потоки, которые уступают перед их интервалом времени, возросли, будет иметь тенденцию быть скорректированным вверх в приоритете от их базового приоритета. Вычислите ограниченные потоки, которые не уступают, используя их весь интервал времени, будет иметь тенденцию уменьшать их приоритет, но не ниже основного уровня. Это расположение часто называют эвристическим планированием. Это обеспечивает лучшую интерактивную производительность и имеет тенденцию уменьшать системное влияние "потоков" пожирателя ресурсов ЦП.

2
ответ дан 1 December 2019 в 23:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: