2014-04-17 13 views
16

Mam aplikację, która wymaga uruchomienia wielowątkowego, ale chcę, aby używał tylko jednego rdzenia komputera, tak jakby mój komputer miał jeden rdzeń (znam zachowanie aplikacji wielowątkowej na komputerze z pojedynczym rdzeniem), chociaż nie jest.Czy można uruchomić aplikację wielowątkową na pojedynczym rdzeniu komputera wielordzeniowego?

Ta aplikacja zostanie wdrożona na komputerze klienta (Windows XP & 7) i nie chcę, aby moja aplikacja używała więcej niż jednego rdzenia. Czy można to zrobić? Czy to zależy od języka programowania? Czy wszystkie zarządzanie wątkami jest pozostawione systemowi operacyjnemu?

Z góry dziękuję.

+3

Ustaw powinowactwo nitki na wszystkich wątkach do jednego rdzenia. –

+0

@ brianbeuning czy to sprawi, że żaden wątek EVER nie działa na innym rdzeniu? czy po prostu ustawia preferencje? – Theolodis

+0

@ Theolodis Odpowiedź prawdopodobnie zależy od systemu operacyjnego, ale w przypadku Linuksa i systemu Windows odpowiedź wydaje się silniejsza niż tylko preferencja. –

Odpowiedz

4

Możesz ustawić powinowactwo całego programu do powiązania tylko z jednym procesorem.

W systemie Unix można użyć taskset, ale w przypadku okien wiem tylko, jak to zrobić z menedżera zadań, który może być nieodpowiedni dla użytkownika.

Mam bibliotekę, Java Thread Affinity, która pozwoli ci ustawić programowo powinowactwo.

AffinitySupport.setAffinity(1); // only run on cpu 0. 

Ogranicza to również każdy wątek rozpoczęty od tego punktu do tego samego powinowactwa.

Można dodać klasę z funkcją main(), która ustawia powinowactwo i wywołuje normalną funkcję main(), co umożliwia dodanie tego bez zmieniania żadnego istniejącego kodu.

+0

W systemie Windows API poziomu procesu to SetProcessAffinityMask(). –

3

Jeśli nie chcesz, aby zmienić źródło programu można użyć komendy OS

W systemie Linux można użyć funkcji cpulimit. Więcej szczegółów here i here

W systemie Windows możesz użyć parametru/AFFINITY do polecenia start. Więcej szczegółów here

Powiązane problemy