usar icon ejemplo definicion codigo java multithreading java-8 multicore

icon - Diferencia entre java 8 arroyos y arroyos paralelos.



text box java (1)

Escribí código utilizando java 8 streams y flujos paralelos para la misma funcionalidad con un colector personalizado para realizar una función de agregación. Cuando veo el uso de la CPU utilizando htop , muestra todos los núcleos de la CPU que se están utilizando tanto para la versión `streams ''como para la versión de'' streams paralelos ''. Entonces, parece que cuando se usa list.stream () , también usa todas las CPU. Aquí, ¿cuál es la diferencia precisa entre parallelStream () y stream () en términos de uso de multi-core ?


Considere el siguiente programa:

import java.util.ArrayList; import java.util.List; public class Foo { public static void main(String... args) { List<Integer> list = new ArrayList<>(); for (int i = 0; i < 1000; i++) { list.add(i); } list.stream().forEach(System.out::println); } }

Notará que este programa emitirá los números de 0 a 999 secuencialmente, en el orden en que están en la lista. Si cambiamos stream() a parallelStream() este ya no es el caso (al menos en mi computadora): todos los números se escriben, pero en un orden diferente. Entonces, aparentemente, parallelStream() hecho usa múltiples hilos.

El htop se explica por el hecho de que incluso las aplicaciones de un solo hilo se dividen en varios núcleos por la mayoría de los sistemas operativos modernos (partes del mismo hilo pueden ejecutarse en varios núcleos, pero por supuesto no al mismo tiempo). Entonces, si ve que un proceso utiliza más de un núcleo, esto no significa necesariamente que el programa use varios subprocesos.

Además, el rendimiento puede no mejorar cuando se utilizan varios subprocesos. El costo de la sincronización puede nihilitar las ganancias de usar múltiples hilos. Para escenarios de prueba simples, este es a menudo el caso. Por ejemplo, en el ejemplo anterior, System.out está sincronizado. Entonces, efectivamente, solo se puede escribir un número al mismo tiempo, aunque se usan múltiples hilos.