Cómo utilizar Async y Multithread
Las condiciones Async y Multihilo operaciones se confunden a menudo. Ambos métodos pretenden mejorar el rendimiento y la eficiencia de los programas optimizando la utilización de los recursos del sistema y reduciendo el tiempo de ejecución. Sin embargo, difieren en el enfoque, los mecanismos y los casos de uso previstos. IronBarcode admite ambos enfoques. Este artículo explora las diferencias entre ellos y cómo implementarlos utilizando IronBarcode.
Cómo utilizar Async y Multithread
- >Descarga la biblioteca C# para soporte async y multihilo
- Utilice
ReadAsync
yReadPdfAsync
métodos de lectura asíncrona de códigos de barras a partir de imágenes y PDF - Habilite el multithreading con la opción Multihilo con el valor "true".
- Especifique el número de hilos paralelos mediante la opción MaxParallelThreads propiedad
- Compruebe la comparación de rendimiento entre la lectura de códigos de barras normal, asíncrona y multihilo.
Empezar a utilizar IronBarcode
Comience a usar IronBarcode en su proyecto hoy con una prueba gratuita.
Ejemplo de lectura asíncrona de códigos de barras
Empecemos por entender qué es la lectura asíncrona y en qué beneficia a los usuarios. La lectura asíncrona permite realizar operaciones largas o bloqueantes sin bloquear la ejecución del hilo principal. En C#, los usuarios pueden utilizar las palabras clave async y await con métodos que admiten funciones asíncronas. Esto no creará hilos adicionales, sino que liberará el hilo actual. Aunque el hilo principal sigue siendo necesario para iniciar y gestionar tareas, no es necesario que se dedique exclusivamente a una sola tarea. El hilo principal es invocado cuando el método asíncrono requiere su participación, liberándolo para manejar otras tareas cuando no es necesario, tales como tareas de E/S como la lectura/escritura de archivos o hacer peticiones de red.
Tomemos como ejemplo la lectura de códigos de barras. En este caso, los pasos serían:
- Lectura del fichero
- Aplicar las opciones de lectura
Descodificación del código de barras
Durante el paso "Lectura del fichero", se puede liberar la tarea principal.
Utilice los métodos
ReadAsync
yReadPdfAsync
para leer códigos de barras de forma asíncrona para imágenes y documentos PDF, respectivamente.
: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
A partir del fragmento de código anterior, hemos instanciado una Lista de rutas de imágenes que IronBarcode leerá de forma asíncrona. Para leer las imágenes, puede utilizar el método ReadAsync
de la clase BarcodeReader. A continuación, los usuarios pueden especificar las rutas de las imágenes, así como las opciones de lectura.
Este método para operaciones asíncronas también está disponible para leer códigos de barras en documentos PDF, conocido como ReadPdfAsync
, que forma parte de la misma clase.
Ejemplo de lectura de códigos de barras en multihilo
A diferencia de las operaciones asíncronas, el multithreading permite ejecutar un único proceso en varios hilos simultáneamente. Esto significa que en lugar de ejecutar un proceso secuencialmente en un único hilo, el multithreading divide las tareas entre varios hilos, lo que permite la ejecución concurrente. Sin embargo, para que el multihilo funcione, una máquina debe tener varios núcleos de CPU, ya que estos núcleos se utilizan para ejecutar los hilos de forma independiente. Al igual que las operaciones asíncronas, el multithreading pretende mejorar el rendimiento y la capacidad de respuesta de las aplicaciones.
En IronBarcode, active el multithreading estableciendo la propiedad Multithreaded y especificando el máximo de núcleos para la ejecución concurrente mediante MaxParallelThreads en BarcodeReaderOptions. El valor por defecto para MaxParallelThreads es 4, que puede ajustarse en función de los núcleos de CPU disponibles.
Atención
: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
Comparación de resultados
Ahora, leamos las dos imágenes de abajo y comparemos el tiempo de lectura de las operaciones normales, asíncronas y multihilo.
Imagen de muestra
Lectura normal | Lectura asíncrona | Lectura multihilo (4 núcleos) |
---|---|---|
1,75 segundos | 1,67 segundos | 1.17 segundo |
De la tabla comparativa se desprende que hay un aumento significativo del rendimiento una vez que se implementa la lectura asíncrona y multihilo. Sin embargo, estas dos operaciones responden a objetivos y planteamientos diferentes. Por lo tanto, los usuarios deben determinar qué enfoque se adapta mejor a la aplicación que están creando.
Por último, puede haber situaciones en las que haya varios códigos de barras en un mismo documento. Para más información, visiteLeer varios códigos de barras guía.