Il javadoc per Runtime.availableProcessors()
in Java 1.6 è deliziosamente non specifico. Sta guardando solo la configurazione hardware o anche il carico? È abbastanza intelligente da evitare di essere ingannato dall'iperthreading? Rispetta un insieme limitato di processori tramite il comando linux taskset
?Runtime.availableProcessors: cosa restituirà?
Posso aggiungere un punto dati personale: su un computer con 12 core e hyperthreading, Runtime.availableProcessors() restituisce infatti 24, che non è un buon numero da utilizzare per decidere quanti thread provare a eseguire. La macchina non era chiaramente inattiva, quindi non avrebbe potuto nemmeno guardare il carico in modo efficace.
Il fatto che la documentazione menzioni esplicitamente che il suo valore potrebbe cambiare rende improbabile che stia osservando solo la configurazione hardware. La mia ipotesi è che restituisce il numero di thread Java che possono essere eseguiti in parallelo. – biziclop
Oracle/Sun hanno scritto documenti "ottimistici" in passato. Sono d'accordo sull'implicazione, ma sto cercando i fatti. – bmargulies