Czy istnieje sposób określenia, na którym procesorze działa dany wątek? Najlepiej w C#, ale zrobi to C++.Jak ustalić, na którym procesorze działa wątek?
Klasy .NET Process i ProcessThread wydają się nie udostępniać tych informacji.
ETA Wyjaśnienia:
Rozwijamy aplikacji serwera, który przetwarza http strumieni multicast i spawns wiele koderów wideo. Działa na systemie z 12 rdzeniami fizycznymi, co daje 24 procesory logiczne (hyperthreading). Poprzez TaskManager i ProcessExplorer sprawdziliśmy, że nasze procesy spawnowane rozkładają się równomiernie na logiczne procesory. Jednak widzimy wiele (jądro?) Działań na jednym procesorze, który koliduje ze zjedzeniem niezwykłych ilości czasu procesora. Próbujemy określić, które procesy/wątki są uruchomione na tym konkretnym procesorze. Ani TaskManager, ani ProcessExplorer nie wydają się dostarczać tych informacji. Jeśli tak, proszę wyjaśnić, w jaki sposób można uzyskać takie informacje.
W przeciwnym razie rozważamy napisanie własnego narzędzia, aby uzyskać te informacje. I właśnie tego potrzebujemy pomocy.
Wiemy, jak zmienić powinowactwo nitek (i wiemy, że nie ma gwarancji, że wątek pozostanie powiązany z dowolnym procesorem, chociaż w tym konkretnym przypadku wątek (y) pochłaniający procesor pozostaje powiązany z tylko jednym procesorem), ale aby to zrobić, musimy najpierw ustalić, który proces/wątek musi zostać przeniesiony. To jest jedyny cel tego pytania.
Mam nadzieję, że pomoże to wyjaśnić problem.
Jaki problem próbujesz rozwiązać za pomocą tych informacji? –
Jest znany tylko kernalowi. Musisz więc programować w trybie kernal. Poszukaj interfejsów API Kernal w witrynie MSDN. – Nawaz
Co byś zrobił, gdyby wątek działał na wiele różnych procesorów w różnych momentach? –