Cómo establecer el número máximo de subprocesos paralelos

This article was translated from English: Does it need improvement?
Translated
View the article in English

Al leer grandes volúmenes de códigos de barras, depender de un proceso de un solo subproceso puede crear cuellos de botella en el rendimiento y limitar la escalabilidad. Sin embargo, el uso de subprocesos paralelos permite que su aplicación procese múltiples imágenes simultáneamente, multiplicando efectivamente la potencia de procesamiento total y reduciendo drásticamente el tiempo que lleva finalizar un trabajo por lotes.

Establecer un límite máximo en estos subprocesos es una forma poderosa de optimizar el rendimiento. Asegura que la aplicación utilice todo el potencial del hardware al equilibrar la carga de trabajo entre los núcleos del procesador. Este enfoque maximiza la eficiencia, manteniendo la aplicación funcionando sin problemas y ofreciendo los resultados más rápidos posibles.

IronBarcode proporciona una forma sencilla de controlar este límite, garantizando que se logre un rendimiento óptimo de la máquina. La siguiente sección demuestra cómo establecer fácilmente estos límites de subprocesos.

Comience a usar IronBarcode



Establecer el máximo de subprocesos paralelos

Para este ejemplo, utilizaremos un gran conjunto de imágenes de códigos de barras para ilustrar la escalabilidad y la eficiencia de utilizar un proceso multiproceso en lugar de uno de un solo subproceso. Puedes descargar la carpeta de imágenes aquí .

Para configurar IronBarcode para utilizar más de un hilo, primero se crea una instancia de un nuevo objeto BarcodeReaderOptions con Multithreaded establecido en verdadero. Posteriormente se establece la propiedad MaxParallelThreads asignando un valor entero. De forma predeterminada, MaxParallelThreads está establecido en 4.

Después de configurar los ajustes, se importa una gran cantidad de imágenes de códigos de barras desde la carpeta. Luego, mediante un bucle, se lee el directorio de imágenes de código de barras utilizando el método Read , pasando la ruta del archivo y el BarcodeReaderOptions configurado. Finalmente, el valor y el tipo de código de barras se muestran accediendo a BarcodeResults .

:path=/static-assets/barcode/content-code-examples/how-to/set-max-parallel-thread.cs
using IronBarCode;
using System;
using System.IO;

int maxParallelThreads = 4;


var optionsFaster = new BarcodeReaderOptions
{
    // Set Max threads to 4
    Multithreaded = true,
    MaxParallelThreads = maxParallelThreads,
};

// Dynamically get the "images" folder in the current directory
string folderPath = Path.Combine(Directory.GetCurrentDirectory(), "images");

// Retrieve all JPG files in the directory
var pdfFiles = Directory.GetFiles(folderPath, "*.jpg");

foreach (var file in pdfFiles)
{
    // Read the barcode
    var results = BarcodeReader.Read(file);

    foreach (var result in results)
    {
        // Show the type and value for every barcode found
        Console.WriteLine($"Value: {result.Value}, Type: {result.BarcodeType}");
            
    }
    
}

$vbLabelText   $csharpLabel

Resultado

Salida multiproceso

Como se muestra en la salida de la consola, muestra el valor y el tipo de código de barras para cada imagen correspondiente.

Configuración del hilo paralelo máximo apropiado

Cuando la propiedad Multithreaded se establece en verdadero, la propiedad MaxParallelThreads tiene como valor predeterminado 4. Aunque no existe un límite estricto para el entero asignado a MaxParallelThreads , configurar un valor más alto que la capacidad del núcleo lógico de su hardware puede, en realidad, resultar en una disminución del rendimiento. Esto se debe a que el procesador no puede manejar cambios de contexto excesivos, lo que puede generar sobrecarga en lugar de velocidad. Como tal, el valor correcto para MaxParallelThreads depende de las especificaciones de la computadora y los desarrolladores deben realizar pruebas para encontrar el valor óptimo para su entorno.

En este ejemplo, mostraremos el mismo escenario multiproceso de arriba, pero con un temporizador instalado para comparar el valor predeterminado de 4 con el uso Environment.ProcessorCount para utilizar todos los subprocesos disponibles. En nuestro caso, estamos utilizando una computadora con 32 procesadores lógicos, por lo que MaxParallelThreads se establecerá en 32.

:path=/static-assets/barcode/content-code-examples/how-to/set-max-parallel-thread-performance.cs
using IronBarCode;
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;

// Set the max parallel threads to the number of processor cores
int maxParallelThreads = Environment.ProcessorCount;


var optionsFaster = new BarcodeReaderOptions
{
    // Set Max threads to the number of processor cores
    Multithreaded = true,
    MaxParallelThreads = maxParallelThreads,
    ExpectMultipleBarcodes = true,
};

// Start timing the process
var stopwatch = Stopwatch.StartNew();
// Dynamically get the "images" folder in the current directory
string folderPath = Path.Combine(Directory.GetCurrentDirectory(), "images");

// Check if directory exists to prevent crashes
if (!Directory.Exists(folderPath))
{
    Console.WriteLine($"Error: The directory '{folderPath}' does not exist.");
    return;
}

// Get all JPG files in the directory
var pdfFiles = Directory.GetFiles(folderPath, "*.jpg");

foreach (var file in pdfFiles)
{
    // Read the barcode
    var results = BarcodeReader.Read(file);

    if (results.Any())
    {
        Console.WriteLine($"Barcode(s) found in: {Path.GetFileName(file)}");
        foreach (var result in results)
        {
            Console.WriteLine($"  Value: {result.Value}, Type: {result.BarcodeType}");
            
        }
    }
}

stopwatch.Stop();

// Print number of images the barcode reader could decode
Console.WriteLine($" Max parallel threads of {maxParallelThreads} with {stopwatch.Elapsed.TotalSeconds:F2}s");
$vbLabelText   $csharpLabel

Resultado

Tiempo de proceso con 4 subprocesos

4 procesadores

El tiempo de procesamiento para este proceso es de 84 segundos.

Tiempo de proceso con el entorno ProcessorCount

32 Procesador

Como puede ver, el tiempo de procesamiento para esta operación es de 53 segundos, lo que es significativamente más rápido que ejecutarla con solo cuatro subprocesos. Sin embargo, tenga en cuenta que el uso de más subprocesos no garantiza un mejor rendimiento, ya que depende del procesador host. Una regla general es utilizar la cantidad máxima de procesadores disponibles menos uno, garantizando así que todavía haya un solo hilo disponible para otras operaciones del sistema.

Advertencia El entorno del proyecto debe estar configurado para permitir subprocesos múltiples. De lo contrario, establecer Multithreaded como true y aumentar MaxParallelThreads no mejorará la velocidad del proceso y, de hecho, puede disminuirla.

Preguntas Frecuentes

¿Cuál es el propósito de establecer el máximo de subprocesos paralelos en IronBarcode?

Configurar el máximo de subprocesos paralelos le permite optimizar el rendimiento de la generación de códigos de barras al utilizar eficientemente los recursos del sistema, especialmente al procesar una gran cantidad de códigos de barras de forma masiva.

¿Cómo puedo configurar el máximo de subprocesos paralelos en IronBarcode?

Puede configurar la cantidad máxima de subprocesos paralelos en IronBarcode utilizando el método apropiado en su código C# para establecer la cantidad deseada de subprocesos para las tareas de generación de códigos de barras.

¿Por qué es importante optimizar el rendimiento para la creación masiva de códigos de barras?

La optimización del rendimiento para la creación masiva de códigos de barras garantiza que el proceso sea eficiente y rápido, reduciendo el tiempo y los recursos necesarios para generar un gran volumen de códigos de barras, lo cual es esencial para aplicaciones con demandas de alto rendimiento.

¿Cuáles son los beneficios de utilizar el procesamiento paralelo en IronBarcode?

El procesamiento paralelo en IronBarcode permite una generación de códigos de barras más rápida al utilizar múltiples núcleos de CPU, lo que genera un mejor rendimiento de la aplicación y un menor tiempo de procesamiento para tareas de códigos de barras a gran escala.

¿Puede la configuración de demasiados subprocesos paralelos afectar negativamente el rendimiento?

Sí, configurar demasiados subprocesos en paralelo puede generar contención de recursos y mayor sobrecarga, lo que podría reducir el rendimiento. Es importante encontrar una configuración equilibrada que se ajuste a las capacidades de su sistema.

¿Qué consideraciones hay que tener en cuenta a la hora de elegir el número de hilos paralelos?

Hay que tener en cuenta la cantidad de núcleos de CPU disponibles, la carga de trabajo del sistema y la naturaleza de las tareas de generación de códigos de barras. Es recomendable experimentar con diferentes configuraciones para encontrar la óptima.

¿Existe una configuración predeterminada para subprocesos paralelos en IronBarcode?

IronBarcode puede tener una configuración predeterminada para subprocesos paralelos, pero se recomienda personalizar esta configuración según las necesidades específicas de su aplicación para lograr el mejor rendimiento.

¿Cómo gestiona IronBarcode la gestión de subprocesos?

IronBarcode aprovecha las capacidades de subprocesos de .NET para administrar el procesamiento paralelo, lo que permite a los desarrolladores especificar la cantidad de subprocesos para optimizar el rendimiento de manera efectiva.

¿Puedo cambiar dinámicamente el número de subprocesos paralelos durante la ejecución?

No se recomienda cambiar dinámicamente el número de subprocesos paralelos durante la ejecución, ya que puede generar inconsistencias y afectar la estabilidad del rendimiento. Es recomendable configurar el sistema antes de iniciar el proceso de generación de códigos de barras.

¿Cuáles son algunos casos de uso comunes para configurar el máximo de subprocesos paralelos en la generación de códigos de barras?

Los casos de uso comunes incluyen aplicaciones que requieren generación de códigos de barras de alta velocidad, como sistemas de gestión de inventario, sistemas de puntos de venta minoristas y aplicaciones de logística donde procesar grandes volúmenes de códigos de barras rápidamente es fundamental.

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien ...

Leer más
¿Listo para empezar?
Nuget Descargas 2,035,202 | Versión: 2025.12 recién lanzado