El javadoc para Runtime.availableProcessors()
en Java 1.6 es deliciosamente inespecífico. ¿Está mirando solo a la configuración del hardware, o también a la carga? ¿Es lo suficientemente inteligente como para evitar ser engañado por hyperthreading? ¿Respeta un conjunto limitado de procesadores a través del comando linux taskset
?Runtime.availableProcessors: ¿qué va a devolver?
Puedo agregar un punto de datos propio: en una computadora aquí con 12 núcleos e hyperthreading, Runtime.availableProcessors() de hecho devuelve 24, que no es un buen número para decidir cuántos hilos tratar de ejecutar. La máquina claramente no estaba inactiva, por lo que tampoco pudo haber estado mirando la carga de ninguna manera efectiva.
El hecho de que la documentación mencione explícitamente que su valor puede cambiar hace que sea poco probable que solo esté mirando la configuración del hardware. Supongo que devuelve el número de subprocesos de Java que se pueden ejecutar en paralelo. – biziclop
Oracle/Sun ha escrito documentos 'optimistas' en el pasado. Estoy de acuerdo con la implicación, pero estoy buscando hechos. – bmargulies