2010-07-07 15 views

Respuesta

4

Teniendo en cuenta el costo, la única respuesta válida es probarlo usted mismo (forma no tan elegante de decirle que nunca he hecho una prueba, y nunca lo haré, ya que el mecanismo de ejecución moderno proporciona una creación muy avanzada/mecanismos de destrucción).

Consignando las implementaciones existentes, las versiones modernas de Java (comenzando con Java 5) ofrecen varias subclases de ThreadPoolExecutor que combina los beneficios de un grupo de subprocesos con los conceptos más modernos de java.util.concurrent: ejecutores.

Además, nunca recomendaría lo suficiente como para que te olvides de los hilos y para repalce con Runnable, llamables y otros objetos de cálculo más avanzados. De esta manera, puede cambiar fácilmente la implementación de los ejecutores.

+0

La clase de utilidad estática de los ejecutores simplemente ofrece crear una instancia de ThreadPoolExecutor que se configura según el método que se llame. –

5

Siempre debe usar un grupo de subprocesos. No solo por el rendimiento, sino por la facilidad de uso que le brinda el paquete java.util.concurrent. Con Java 5 y posterior, la agrupación de subprocesos está incorporada.

En lugar de pensar en términos de 'subprocesos', use la interfaz Executor para ejecutar las tareas que necesita realizar. La creación de un nuevo grupo de subprocesos es tan simple como:

Executor executor = Executors.newFixedThreadPool(5); 

la documentación completa sobre el paquete java.util.concurrent está aquí: http://java.sun.com/javase/6/docs/api/java/util/concurrent/package-frame.html

0

hilos Creación siempre es caro, independientemente de la plataforma. El tiempo real para crear un hilo depende del sistema operativo.

Recomendaría utilizar un grupo de subprocesos si crea subprocesos efímeros con mucha frecuencia. Por ejemplo, si la tarea principal de su aplicación es dar servicio a tareas tan breves, un grupo de subprocesos sería muy bueno.

Un grupo de subprocesos también es bueno si crea demasiados subprocesos. El cambio de contexto entre hilos también puede matar el rendimiento. Para resumir, en la arquitectura contemporánea de PC de cuatro núcleos, debe tener como objetivo no tener más de 200 hilos corriendo al mismo tiempo.

+2

Alguien midió esto al responder una pregunta aquí: http://stackoverflow.com/questions/2117072/java-thread-creation-overhead Creó 10.000 hilos por segundo, por lo que no es demasiado caro. –

+0

Crear subprocesos puede ser correcto, como en Java, creo que los subprocesos reales se crean solo cuando se inicia el método de subprocesos. Sin embargo, 10.000 hilos son un asesino de rendimiento debido al cambio de contexto. – Nick

Cuestiones relacionadas