Como Definir Máximas de Threads Paralelos

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

Ao ler grandes volumes de códigos de barras, confiar em um processo de thread único pode criar gargalos de desempenho e limitar a escalabilidade. No entanto, usar threads paralelos permite que sua aplicação processe várias imagens simultaneamente, multiplicando efetivamente o poder de processamento total e reduzindo drasticamente o tempo para concluir um lote de trabalho.

Definir um limite máximo para esses threads é uma maneira poderosa de otimizar o desempenho. Isso garante que a aplicação utilize todo o potencial do hardware, equilibrando a carga de trabalho entre os núcleos do processador. Essa abordagem maximiza a eficiência, mantendo a aplicação funcionando sem problemas enquanto entrega os resultados mais rápidos possíveis.

IronBarcode oferece uma maneira simples de controlar esse limite, garantindo que o desempenho ideal da máquina seja alcançado. A seção a seguir demonstra como definir facilmente esses limites de threads.



Definir o Máximo de Threads Paralelos

Para este exemplo, usaremos um grande conjunto de imagens de código de barras para ilustrar a escalabilidade e eficiência de usar um processo multithread em vez de um de thread único. Você pode baixar a pasta de imagens aqui.

Para configurar o IronBarcode para usar mais de um thread, um novo objeto BarcodeReaderOptions é primeiro instanciado com Multithreaded definido como verdadeiro. Em seguida, a propriedade MaxParallelThreads é configurada atribuindo um valor inteiro. Por padrão, MaxParallelThreads é definido como 4.

Após configurar as definições, um grande número de imagens de código de barras é importado da pasta. Em seguida, usando um loop, o diretório de imagens de código de barras é lido usando o método Read, passando o caminho do arquivo e o BarcodeReaderOptions configurado. Finalmente, o valor e o tipo do código de barras são exibidos ao acessar o BarcodeResults.

:path=/static-assets/barcode/content-code-examples/how-to/set-max-parallel-thread.cs
using Google.Protobuf.WellKnownTypes;
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

Saída

Saída Multithread

Conforme mostrado na saída do console, ele exibe o valor e o tipo do código de barras para cada imagem correspondente.

Configurando o Apropriado Máximo de Thread Paralelo

Quando a propriedade Multithreaded é definida como verdadeira, a propriedade MaxParallelThreads por padrão é 4. Embora não haja um limite rígido para o inteiro atribuído a MaxParallelThreads, definir o valor acima da capacidade lógica do núcleo do seu hardware pode, na verdade, resultar em uma diminuição no desempenho. Isso ocorre porque o processador não consegue lidar com a troca excessiva de contexto, potencialmente resultando em sobrecarga ao invés de velocidade. Assim, o valor correto para MaxParallelThreads depende das especificações do computador, e os desenvolvedores devem testar para encontrar o valor ideal para o seu ambiente.

Neste exemplo, vamos mostrar o mesmo cenário multithread mencionado acima, mas com um temporizador no lugar para comparar o valor padrão de 4 com o uso de Environment.ProcessorCount para utilizar todos os threads disponíveis. No nosso caso, estamos usando um computador com 32 processadores lógicos, então MaxParallelThreads será definido como 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

Saída

Tempo de Processamento com 4 Threads

4 Processadores

O tempo de processamento para este processo é de 84 segundos.

Tempo de Processamento com Contagem de Processadores do Ambiente

32 Processadores

Como você pode ver, o tempo de processamento para esta operação é de 53 segundos, o que é significativamente mais rápido do que executá-lo com apenas quatro threads. No entanto, observe que usar mais threads não garante um desempenho melhorado, pois depende do processador host. Uma regra geral é usar o número máximo de processadores disponíveis menos um, garantindo que ainda haja uma thread disponível para outras operações do sistema.

AvisoO ambiente do projeto deve estar configurado para permitir multi-threading. Caso contrário, definir Multithreaded para true e aumentar MaxParallelThreads não melhorará a velocidade do processo e pode realmente diminuí-la.

Perguntas frequentes

Qual a finalidade de definir o número máximo de threads paralelas no IronBarcode?

Definir o número máximo de threads paralelas permite otimizar o desempenho da geração de códigos de barras, utilizando os recursos do sistema de forma eficiente, especialmente ao processar um grande número de códigos de barras em lote.

Como posso configurar o número máximo de threads paralelas no IronBarcode?

Você pode configurar o número máximo de threads paralelas no IronBarcode usando o método apropriado em seu código C# para definir o número desejado de threads para tarefas de geração de código de barras.

Por que é importante otimizar o desempenho na criação em massa de códigos de barras?

A otimização do desempenho na criação em massa de códigos de barras garante que o processo seja eficiente e rápido, reduzindo o tempo e os recursos necessários para gerar um grande volume de códigos de barras, o que é essencial para aplicações com alta demanda de produção.

Quais são os benefícios de usar processamento paralelo no IronBarcode?

O processamento paralelo no IronBarcode permite uma geração mais rápida de códigos de barras, utilizando múltiplos núcleos de CPU, o que resulta em melhor desempenho da aplicação e redução do tempo de processamento para tarefas de código de barras em larga escala.

Configurar um número excessivo de threads paralelas pode afetar negativamente o desempenho?

Sim, configurar muitas threads paralelas pode levar à disputa por recursos e aumento da sobrecarga, potencialmente reduzindo o desempenho. É importante encontrar uma configuração equilibrada que corresponda às capacidades do seu sistema.

Que considerações devem ser feitas ao escolher o número de threads paralelas?

É preciso levar em consideração o número de núcleos de CPU disponíveis, a carga de trabalho do sistema e a natureza das tarefas de geração de código de barras. O ideal é experimentar diferentes configurações para encontrar a configuração ideal.

Existe alguma configuração padrão para threads paralelas no IronBarcode?

O IronBarcode pode ter uma configuração padrão para threads paralelas, mas recomenda-se personalizar essa configuração de acordo com as necessidades específicas da sua aplicação para obter o melhor desempenho.

Como o IronBarcode gerencia threads?

O IronBarcode aproveita os recursos de multithreading do .NET para gerenciar o processamento paralelo, permitindo que os desenvolvedores especifiquem o número de threads para otimizar o desempenho de forma eficaz.

Posso alterar o número de threads paralelas dinamicamente durante a execução?

Alterar dinamicamente o número de threads paralelas durante a execução pode não ser recomendável, pois pode levar a inconsistências e afetar a estabilidade do desempenho. É melhor definir a configuração antes de iniciar o processo de geração do código de barras.

Quais são alguns casos de uso comuns para definir o número máximo de threads paralelas na geração de códigos de barras?

Os casos de uso comuns incluem aplicações que exigem geração de códigos de barras em alta velocidade, como sistemas de gerenciamento de estoque, sistemas de ponto de venda no varejo e aplicações logísticas onde o processamento rápido de grandes volumes de códigos de barras é fundamental.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais
Pronto para começar?
Nuget Downloads 2,108,094 | Versão: 2026.3 acaba de ser lançado
Still Scrolling Icon

Ainda está rolando a tela?

Quer provas rápidas? PM > Install-Package BarCode
executar um exemplo Veja seu fio se transformar em um código de barras.