2014-04-17 12 views
16

Ho un'applicazione che ho bisogno di eseguire multithread ma voglio che usi solo un core del computer, come se il mio computer fosse single core (conosco il comportamento dell'applicazione multithread su un computer con core singolo), sebbene non è.È possibile eseguire un'applicazione multithread su un singolo core del computer multicore?

Questa applicazione verrà distribuita su un computer del cliente (Windows XP & 7) e non desidero che la mia applicazione utilizzi più di un core. Può essere fatto? Dipende dal linguaggio di programmazione? O tutta la gestione dei thread è lasciata al sistema operativo?

Grazie in anticipo.

+3

Impostare l'affinità del thread su tutti i thread su un core. –

+0

@brianbeuning farebbe in modo che NESSUN thread venga eseguito su un altro core? o semplicemente imposta la preferenza? – Theolodis

+0

@Theolodis La risposta dipende probabilmente dal sistema operativo, ma per Linux e Windows la risposta sembra essere più forte di una semplice preferenza. –

risposta

4

È possibile impostare l'affinità dell'intero programma per il collegamento a una sola CPU.

In unix è possibile utilizzare taskset ma per Windows so solo come farlo dal task manager che potrebbe non essere adatto.

Ho una libreria, Java Thread Affinity che consente di impostare l'affinità in modo programmatico.

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

Ciò limiterà anche qualsiasi thread avviato da quel punto alla stessa affinità.

È possibile aggiungere una classe con un main() che imposta l'affinità e chiama il normale main() che consente di aggiungere ciò senza alterare il codice esistente.

+0

Su Windows l'API a livello di processo è SetProcessAffinityMask(). –

3

Se non si desidera modificare la sorgente del programma è possibile utilizzare i comandi del sistema operativo

Su Linux è possibile utilizzare lo strumento cpulimit. Maggiori dettagli here e here

Su Windows è possibile utilizzare il parametro/AFFINITY per il comando di avvio. Maggiori dettagli here

Problemi correlati