Есть ли способ определить, на каком процессоре работает данный поток? Предпочтительно в С#, но С++ будет делать.
В классах .NET Process и ProcessThread эти данные не отображаются.
Разъяснения ETA:
Мы разрабатываем серверное приложение, которое обрабатывает HTTP-многоадресные потоки и порождает несколько видеокодеров. Это работает на системе с 12 физическими ядрами, что приводит к 24 логическим процессорам (гиперпоточность). Через TaskManager и ProcessExplorer мы проверили, что наши порожденные процессы равномерно распределяются по логическим процессорам. Тем не менее, мы видим много (ядро?) Активность только на одном CPU, который мешает, потребляя необычное количество процессорного времени. Мы пытаемся определить, какие процессы (процессы)/потоки выполняются на этом конкретном процессоре. Кажется, что ни TaskManager, ни ProcessExplorer не предоставляют эту информацию. Если они это сделают, объясните, как можно получить такую информацию.
В противном случае мы планируем написать наш собственный инструмент для получения этой информации. И это то, с чем нам нужна помощь.
Мы знаем, как изменить аффинность потоков (и мы знаем, что нет гарантии, что поток останется связанным с каким-либо процессором, хотя в этом конкретном случае поток (ы), потребляющий процессор, остается связанным только с одним процессором), но для этого нам нужно сначала определить, какой процесс/поток необходимо переместить. Это единственная цель этого вопроса.
Надеюсь, это поможет прояснить проблему.