2015-04-02 4 views
6

Quello che mi sto chiedendo (e quale documentazione trovo non è molto utile per capirlo), è ciò che accade a un core della CPU quando il Thread che sta eseguendo su di esso trasferisce il controllo a cose di dispositivi hardware (controller del disco, rete I/O, ...) per fare cose che la CPU/core non può aiutare. Questo core diventa disponibile per l'esecuzione di altri thread, o semplicemente si ferma e aspetta (anche se ci sono altri thread con lavoro CPU da fare che sono disponibili per la pianificazione)?In JVM, gli oggetti Thread sono legati direttamente ai core della CPU o c'è un Mapper in mezzo?

Il consiglio spesso dato di "tanti thread come nuclei" sembra suggerire quest'ultimo.

+1

Java utilizza thread OS nativi. Pertanto la schedatura dei thread è il lavoro del sistema operativo. Il runtime Java crea solo i thread. – Robert

+4

Il consiglio "tanti thread come core" è adeguato quando le attività sono vincolate alla CPU. Se stanno facendo un IO di rete, è possibile utilizzare più thread. E sì, certo, se un thread non ha bisogno della CPU, lo scheduler del SO lascerà che sia usato da un altro thread. –

+0

Thx. Accettabile come risposta –

risposta

1

Questo è fuori controllo in Java. La pianificazione viene eseguita dal sistema operativo e quindi al di fuori dell'ambito della JVM.

È molto probabile che il core venga recuperato dal sistema operativo quando è in attesa di qualche IO da eseguire.

Il semplice consiglio "un thread per core/processore" è per operazioni intensive della CPU. Se sai che la maggior parte del tempo stai aspettando IO, puoi creare più thread di quanti siano i core.

noti inoltre che abilitato diFilettatura conta per il numero di processori disponibili così un processore quad-core con abilitato diFilettatura dovrà essere riportato un aventi 8 processori disponibili (vedere anche this question).

Problemi correlati