¿Qué son los flujos paralelos de Java?

Java Parallel Streams es una característica de Java 8 y superior, diseñada para utilizar varios núcleos del procesador. Normalmente, cualquier código Java tiene un flujo de procesamiento, donde se ejecuta secuencialmente. Mientras que al usar flujos paralelos, podemos dividir el código en múltiples flujos que se ejecutan en paralelo en núcleos separados y el resultado final es la combinación de los resultados individuales. Sin embargo, el orden de ejecución no está bajo nuestro control.

Por lo tanto, es recomendable utilizar secuencias paralelas en los casos en que, independientemente del orden de ejecución, el resultado no se ve afectado y el estado de un elemento no afecta al otro, así como la fuente de los datos tampoco se ve afectada.

¿Por qué flujos paralelos?

Las secuencias paralelas se introdujeron para aumentar el rendimiento de un programa, pero optar por secuencias paralelas no siempre es la mejor opción. Hay ciertos casos en los que necesitamos que el código se ejecute en un cierto orden y, en estos casos, es mejor usar flujos secuenciales para realizar nuestra tarea a costa del rendimiento. La diferencia de rendimiento entre los dos tipos de flujos solo es importante para programas a gran escala o proyectos complejos. Para programas a pequeña escala, es posible que ni siquiera se note. Básicamente, debe considerar usar flujos paralelos cuando el flujo secuencial se comporta mal.

Formas de crear flujo 

Hay dos formas en que podemos crear, que se enumeran a continuación y se describen más adelante de la siguiente manera:

  1. Usando el método paralelo() en una secuencia
  2. Uso de parallelStream() en una colección 

Método 1: usar el método paralelo() en una secuencia

El método paralelo() de la interfaz BaseStream devuelve un flujo paralelo equivalente. Expliquemos cómo funcionaría con la ayuda de un ejemplo.

En el código que se proporciona a continuación, creamos un objeto de archivo que apunta a un archivo ‘txt’ preexistente en el sistema. Luego creamos un Stream que lee del archivo de texto una línea a la vez. Luego usamos el método paralelo() para imprimir el archivo leído en la consola. El orden de ejecución es diferente para cada ejecución, puede observar esto en la salida. Las dos salidas dadas a continuación tienen diferentes órdenes de ejecución.

Ejemplo 

Java

// Java Program to Illustrate Parallel Streams
// Using parallel() method on a Stream
  
// Importing required classes
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.stream.Stream;
  
// Main class
// ParallelStreamTest
public class GFG {
  
    // Main driver method
    public static void main(String[] args) throws IOException {
  
        // Creating a File object
        File fileName = new File("M:\\Documents\\Textfile.txt");
  
        // Create a Stream of string type
        // using the lines() method to
        // read one line at a time from the text file
        Stream<String> text = Files.lines(fileName.toPath());
  
        // Creating parallel streams using parallel() method
        // later using forEach() to print on console
        text.parallel().forEach(System.out::println);
  
        // Closing the Stream
        // using close() method
        text.close();
    }
}

Producción: 

1A

Salida 1

1B

Salida 2

Método 2: Uso de parallelStream() en una colección

El método parallelStream() de la interfaz Collection devuelve un posible flujo paralelo con la colección como fuente. Expliquemos el funcionamiento con la ayuda de un ejemplo.

Implementación:

En el código que se proporciona a continuación, nuevamente estamos usando secuencias paralelas, pero aquí estamos usando una Lista para leer el archivo de texto. Por lo tanto, necesitamos el método parallelStream().

Ejemplo

Java

// Java Program to Illustrate Parallel Streams
// using parallelStream() method on a Stream
  
// Importing required classes
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.*;
  
// Main class
// ParallelStreamsTest
public class GFG {
  
    // Main driver method
    public static void main(String[] args)
        throws IOException
    {
  
        // Creating a File object
        File fileName
            = new File("M:\\Documents\\List_Textfile.txt");
  
        // Reading the lines of the text file by
        // create a List using readAllLines() method
        List<String> text
            = Files.readAllLines(fileName.toPath());
  
        // Creating parallel streams by creating a List
        //  using readAllLines() method
        text.parallelStream().forEach(System.out::println);
    }
}

Producción:

Producción

Publicación traducida automáticamente

Artículo escrito por ManasiKirloskar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *