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.


Commencer avec IronBarcode

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

Première étape :
green arrow pointer

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;

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

Private imagePaths As New List(Of String)() From {"image1.png", "image2.png"}

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

' Read barcode using Async
Private 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)
1.75 secondes1.67 secondes1.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 siteLecture de plusieurs codes-barres guide.

Hairil related to Exemple d'image

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.