Comment utiliser Async et Multithread

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

par Hairil Hasyimi Bin Omar

Les termes Asynchrone et Multithreading sont souvent confondues. Les deux méthodes visent à améliorer les performances et l'efficacité des programmes en optimisant l'utilisation des ressources du système et en réduisant la durée d'exécution. Cependant, elles diffèrent dans leur approche, leurs mécanismes et les cas d'utilisation prévus. IronBarcode prend en charge les deux approches. Cet article explore les différences entre eux et la manière de les mettre en œuvre à l'aide d'IronBarcode.


Bibliothèque NuGet C# pour

Installer avec NuGet

Install-Package BarCode
ou
Java PDF JAR

Télécharger DLL

Télécharger la DLL

Installation manuelle dans votre projet

Bibliothèque NuGet C# pour

Installer avec NuGet

Install-Package BarCode
ou
Java PDF JAR

Télécharger DLL

Télécharger la DLL

Installation manuelle dans votre projet

Commencez à utiliser IronPDF dans votre projet dès aujourd'hui avec un essai gratuit.

Première étape :
green arrow pointer

Découvrez IronBarcode sur NuGet pour une installation rapide et un déploiement facile. Avec plus de 8 millions de téléchargements, il transforme avec C#.

Bibliothèque NuGet C# pour nuget.org/packages/BarCode/
Install-Package BarCode

Envisagez d'installer le IronBarcode DLL directement. Téléchargez et installez-le manuellement pour votre projet ou sous forme de GAC : {{lienDllAfficher}}

Installation manuelle dans votre projet

Télécharger la DLL

Lecture asynchrone des codes-barres Exemple

Commençons par comprendre ce qu'est la lecture asynchrone et quels en sont les avantages pour les utilisateurs. La lecture asynchrone permet de réaliser des opérations longues ou bloquantes sans bloquer l'exécution du fil principal. En C#, les utilisateurs peuvent utiliser les mots-clés async et await avec des méthodes prenant en charge des fonctionnalités asynchrones. Cela ne créera pas d'autres fils de discussion, mais libérera le fil de discussion en cours. Bien que le fil principal soit toujours nécessaire pour initier et gérer les tâches, il ne doit pas être exclusivement consacré à une seule tâche. Le fil d'exécution principal est appelé lorsque la méthode asynchrone requiert son intervention, ce qui lui permet de se consacrer à d'autres tâches lorsqu'il n'en a pas besoin, comme les tâches liées aux E/S, telles que la lecture/écriture de fichiers ou les requêtes réseau.

Prenons l'exemple de la lecture des codes-barres. Dans ce scénario, les étapes à suivre seraient les suivantes :

  • Lecture du fichier
  • Application des options de lecture
  • Décodage du code-barres

    Pendant l'étape "Lecture du fichier", la tâche principale peut être libérée.

    Utilisez les méthodes ReadAsync et ReadPdfAsync pour lire les codes-barres de manière asynchrone pour les images et les documents PDF, respectivement.

:path=/static-assets/barcode/content-code-examples/how-to/async-multithread-async.cs
using IronBarCode;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
#endregion
public class async_multithread_async
{
    public async Task codeAsync()
    {
        List<string> imagePaths = new List<string>() { "image1.png", "image2.png" };

        // Barcode reading options
        BarcodeReaderOptions options = new BarcodeReaderOptions()
        {
            ExpectMultipleBarcodes = true
        };

        // Read barcode using Async
        BarcodeResults asyncResult = await BarcodeReader.ReadAsync(imagePaths, options);

        // Print the results to console
        foreach (var result in asyncResult)
        {
            Console.WriteLine(result.ToString());
        }
    
Imports IronBarCode
Imports System
Imports System.Collections.Generic
Imports System.Threading.Tasks

#End Region
Public Class async_multithread_async
	Public Async Function codeAsync() As Task
		Dim imagePaths As New List(Of String)() From {"image1.png", "image2.png"}

		' Barcode reading options
		Dim options As New BarcodeReaderOptions() With {.ExpectMultipleBarcodes = True}

		' Read barcode using Async
		Dim asyncResult As BarcodeResults = Await BarcodeReader.ReadAsync(imagePaths, options)

		' Print the results to console
		For Each result In asyncResult
			Console.WriteLine(result.ToString())
		Next result
VB   C#

Dans l'extrait de code ci-dessus, nous avons instancié une liste de chemins d'images à lire de manière asynchrone par IronBarcode. Pour lire les images, vous pouvez utiliser la méthode ReadAsync de la classe BarcodeReader. Les utilisateurs peuvent alors spécifier les chemins d'accès à l'image ainsi que les options de lecture.

Cette méthode pour les opérations asynchrones est également disponible pour lire les codes-barres dans les documents PDF, sous le nom de ReadPdfAsync, qui fait partie de la même classe.

Lire des codes-barres dans un exemple multithread

Contrairement aux opérations asynchrones, le multithreading permet à un processus unique d'être exécuté simultanément dans plusieurs threads. Cela signifie qu'au lieu d'exécuter un processus de manière séquentielle dans un seul thread, le multithreading divise les tâches entre plusieurs threads, ce qui permet une exécution simultanée. Toutefois, pour que le multithreading fonctionne, une machine doit disposer de plusieurs cœurs de CPU, car ces cœurs sont utilisés pour exécuter indépendamment les threads. Tout comme les opérations asynchrones, le multithreading vise à améliorer les performances et la réactivité des applications.

Dans IronBarcode, activez le multithreading en définissant la propriété Multithreaded et en spécifiant le nombre maximum de cœurs pour l'exécution simultanée en utilisant MaxParallelThreads dans BarcodeReaderOptions. La valeur par défaut de MaxParallelThreads est de 4, mais elle peut être ajustée en fonction des cœurs de processeur disponibles.

[{i :(Pour trouver les cœurs disponibles : Gestionnaire des tâches -> onglet Performance -> Cliquez sur CPU. le champ 'Cores' affiche le nombre.)}]

:path=/static-assets/barcode/content-code-examples/how-to/async-multithread-multithread.cs
using IronBarCode;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

List<string> imagePaths = new List<string>(){"test1.jpg", "test2.png"};

// Barcode reading options
BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    Multithreaded = true,
    MaxParallelThreads = 4,
    ExpectMultipleBarcodes = true
};

// Read barcode with multithreaded enabled
BarcodeResults results = BarcodeReader.Read(imagePaths, options);

// Print the results to console
foreach (var result in results)
{
    Console.WriteLine(result.ToString());
}
Imports IronBarCode
Imports System
Imports System.Collections.Generic
Imports System.Threading.Tasks

Private imagePaths As New List(Of String)() From {"test1.jpg", "test2.png"}

' Barcode reading options
Private options As New BarcodeReaderOptions() With {
	.Multithreaded = True,
	.MaxParallelThreads = 4,
	.ExpectMultipleBarcodes = True
}

' Read barcode with multithreaded enabled
Private results As BarcodeResults = BarcodeReader.Read(imagePaths, options)

' Print the results to console
For Each result In results
	Console.WriteLine(result.ToString())
Next result
VB   C#

Comparaison des performances

Lisons maintenant les deux images ci-dessous et comparons le temps de lecture des opérations normales, asynchrones et multithread.

Exemple d'image

Image 1
Image 2
Lecture normaleLecture asynchroneLecture multithread (4 cœurs)
01.75 secondes01.67 secondes01.17 secondes

Le tableau comparatif montre clairement que les performances augmentent de manière significative lorsque la lecture asynchrone et multithread est mise en œuvre. Toutefois, ces deux opérations répondent à des objectifs et à des approches différents. Les utilisateurs doivent donc déterminer quelle approche convient le mieux à l'application qu'ils construisent.

Enfin, il peut arriver que plusieurs codes-barres soient présents sur un même document. Pour plus d'informations, visitez le site Lecture de plusieurs codes-barres guide.

Hairil Hasyimi Bin Omar

Ingénieur logiciel

Comme tous les grands ingénieurs, Hairil est un fervent apprenant. Il affine ses connaissances en C#, Python et Java, et les utilise pour apporter une valeur ajoutée aux membres de l'équipe d'Iron Software. Hairil a rejoint l'équipe d'Iron Software en provenance de l'Universiti Teknologi MARA en Malaisie, où il a obtenu une licence en génie chimique et des procédés.