Как определить, на каком ЦП работает поток?

Есть ли способ определить, на каком процессоре работает данный поток? Желательно на C #, но подойдет C ++.

Классы .NET Process и ProcessThread, похоже, не предоставляют эту информацию.

Разъяснения ETA:

Мы разрабатываем серверное приложение, которое обрабатывает потоки многоадресной передачи http и порождает несколько видеокодеров. Это работает в системе с 12 физическими ядрами, в результате чего получается 24 логических процессора (гиперпоточность). С помощью TaskManager и ProcessExplorer мы убедились, что порожденные нами процессы равномерно распределяются по логическим процессорам. Однако мы наблюдаем большую активность (ядра?) Только на одном процессоре, которая мешает, поглощая необычное количество процессорного времени. Мы пытаемся определить, какие процессы / потоки работают на этом конкретном процессоре.Ни TaskManager, ни ProcessExplorer, похоже, не предоставляют эту информацию. Если да, пожалуйста, объясните, как можно получить такую ​​информацию.

В противном случае мы планируем написать наш собственный инструмент для получения этой информации. И в этом нам нужна помощь.

Мы знаем, как изменить сродство потоков (и мы знаем, что нет никакой гарантии, что поток останется связанным с каким-либо ЦП, хотя в этом конкретном случае поток (ы), потребляющие ЦП, остаются связанными только с одним ЦП) , но для этого нам нужно сначала определить, КАКОЙ процесс / поток необходимо переместить. Это единственная цель этого вопроса.

Надеюсь, это поможет прояснить проблему.

14
задан Harald 26 January 2012 в 05:49
поделиться