Maksimum Paralel İplikleri Ayarlama

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

Büyük hacimlerde barkod okurken, tek iplikli bir işleme güvenmek performans darboğazları yaratabilir ve ölçeklenebilirliği sınırlayabilir. Ancak, paralel iplikler kullanarak, uygulamanızın birden çok görüntüyü eşzamanlı olarak işlemesine olanak tanır, bu da toplam işlem gücünü etkili bir şekilde artırır ve bir grup işi bitirmek için gereken zamanı önemli ölçüde azaltır.

Bu iplikler için maksimum limit belirlemek, performansı optimize etmenin güçlü bir yoludur. İş yükünü işlemci çekirdeklerine dengeli bir şekilde dağıtarak uygulamanın donanımın tüm potansiyelini kullanmasını sağlar. Bu yaklaşım verimliliği en üst düzeye çıkararak uygulamanın düzgün çalışmasını sağlarken mümkün olan en hızlı sonuçları sağlar.

IronBarcode, bu limiti kontrol etmenin basit bir yolunu sunarak, optimal makine performansını sağladığından emin olur. Aşağıdaki bölüm, bu iplik limitlerini kolayca nasıl ayarlayabileceğinizi gösterir.



Maksimum Paralel İplikleri Ayarlama

Bu örnek için, büyük bir barkod resimleri seti kullanarak, tek iş parçacıklı yerine çok iş parçacıklı bir işlem kullanmanın ölçeklenebilirliğini ve verimliliğini göstereceğiz. Resim klasörünü buradan indirebilirsiniz.

IronBarcode'u birden fazla iş parçacığı kullanacak şekilde yapılandırmak için, önce BarcodeReaderOptions nesnesi Multithreaded true olarak ayarlanmış şekilde oluşturulur. Daha sonra, MaxParallelThreads özelliği bir tam sayı değeri atanarak ayarlanır. Varsayılan olarak, MaxParallelThreads 4 olarak ayarlanmıştır.

Ayarları yapılandırdıktan sonra, klasörden büyük miktarda barkod görüntüsü içe aktarılır. Daha sonra, bir döngü kullanarak barkod görüntü dizini Read yöntemi kullanılarak, dosya yolu ve yapılandırılmış BarcodeReaderOptions ile okunur. Son olarak, barkod değeri ve türü BarcodeResults erişilerek görüntülenir.

: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}");

    }

}

Imports Google.Protobuf.WellKnownTypes
Imports IronBarCode
Imports System
Imports System.IO

Dim maxParallelThreads As Integer = 4

Dim optionsFaster As New BarcodeReaderOptions With {
    .Multithreaded = True,
    .MaxParallelThreads = maxParallelThreads
}

' Dynamically get the "images" folder in the current directory
Dim folderPath As String = Path.Combine(Directory.GetCurrentDirectory(), "images")

' Retrieve all JPG files in the directory
Dim pdfFiles = Directory.GetFiles(folderPath, "*.jpg")

For Each file In pdfFiles
    ' Read the barcode
    Dim results = BarcodeReader.Read(file)

    For Each result In results
        ' Show the type and value for every barcode found
        Console.WriteLine($"Value: {result.Value}, Type: {result.BarcodeType}")
    Next
Next
$vbLabelText   $csharpLabel

Çıktı

Çok iş parçacıklı çıktı

Konsol çıktısında gösterildiği gibi, her bir ilgili resim için barkod değerini ve türünü gösterir.

Uygun Maksimum Paralel İplik Ayarlama

Multithreaded özelliği true olarak ayarlandığında, MaxParallelThreads özelliği varsayılan olarak 4 olur. MaxParallelThreads için atanan tam sayı için katı bir sınır olmamasına rağmen, değeri donanımınızın mantıksal çekirdek kapasitesinden daha yükseğe ayarlamak performans düşüşüne neden olabilir. Bunun nedeni, işlemcinin aşırı bağlam değişimini işleyememesi, muhtemelen hızdan ziyade overhead ile sonuçlanmasıdır. Bu nedenle, MaxParallelThreads için doğru değer bilgisayarın teknik özelliklerine bağlıdır ve geliştiriciler, ortamları için en iyi değeri bulmak için test yapmalıdır.

Bu örnekte, yukarıdaki aynı çok iş parçacıklı senaryoyu gösterirken, 4 varsayılan değeri ile tüm kullanılabilir iş parçacıklarını kullanmak için Environment.ProcessorCount karşılaştırmak üzere bir zamanlayıcı kullanacağız. Bizim durumumuzda, 32 mantıksal işlemciye sahip bir bilgisayar kullanıyoruz, bu nedenle MaxParallelThreads 32 olarak ayarlanacaktır.

: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");
Imports IronBarCode
Imports System
Imports System.Diagnostics
Imports System.IO
Imports System.Linq

' Set the max parallel threads to the number of processor cores
Dim maxParallelThreads As Integer = Environment.ProcessorCount

Dim optionsFaster As New BarcodeReaderOptions With {
    .Multithreaded = True,
    .MaxParallelThreads = maxParallelThreads,
    .ExpectMultipleBarcodes = True
}

' Start timing the process
Dim stopwatch As Stopwatch = Stopwatch.StartNew()
' Dynamically get the "images" folder in the current directory
Dim folderPath As String = Path.Combine(Directory.GetCurrentDirectory(), "images")

' Check if directory exists to prevent crashes
If Not Directory.Exists(folderPath) Then
    Console.WriteLine($"Error: The directory '{folderPath}' does not exist.")
    Return
End If

' Get all JPG files in the directory
Dim pdfFiles As String() = Directory.GetFiles(folderPath, "*.jpg")

For Each file As String In pdfFiles
    ' Read the barcode
    Dim results = BarcodeReader.Read(file)

    If results.Any() Then
        Console.WriteLine($"Barcode(s) found in: {Path.GetFileName(file)}")
        For Each result In results
            Console.WriteLine($"  Value: {result.Value}, Type: {result.BarcodeType}")
        Next
    End If
Next

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

Çıktı

4 İplik ile İşlem Süresi

4 İşlemci

Bu işlem için işlem süresi 84 saniyedir.

Ortam İşlemci Sayısı ile İşlem Süresi

32 İşlemci

Gördüğünüz gibi, bu işlem için işlem süresi 53 saniyedir, bu da onu yalnızca dört iş parçacığı ile çalıştırmaktan önemli ölçüde daha hızlıdır. Ancak, lütfen daha fazla iplik kullanmanın iyileştirilmiş performans garantisi vermediğini unutmayın, çünkü bu durum barındırıcı işlemciye bağlıdır. Genel bir kural olarak, diğer sistem işlemleri için hala kullanılabilir bir tek iplik kalmasını sağlamak için mevcut işlemcilerin en yüksek sayısından bir eksik olanı kullanmak en iyisi olabilir.

Uyarı Proje ortamının çoklu iş parçacığına izin verecek şekilde yapılandırılması gerekir. Aksi takdirde, Multithreaded true olarak ayarlamak ve MaxParallelThreads artırmak işlem hızını iyileştirmeyecektir ve aslında azaltabilir.

Sıkça Sorulan Sorular

IronBarcode'da maksimum paralel iş parçacıkları ayarlamanın amacı nedir?

Maksimum paralel iş parçacıkları ayarlamak, özellikle çoğu barkodu toplu olarak işlerken sistem kaynaklarını verimli kullanarak barkod üretim performansını optimize etmenizi sağlar.

IronBarcode'da maksimum paralel iş parçacıkları nasıl yapılandırılır?

IronBarcode'da maksimum paralel iş parçacıkları, C# kodunuzda uygun yöntemi kullanarak barkod üretim görevleri için istenen iş parçacığı sayısını ayarlayarak yapılandırılabilir.

Toplu barkod oluşturma için performansı optimize etmek neden önemlidir?

Toplu barkod oluşturma için performansı optimize etmek, işlemin verimli ve hızlı olmasını, büyük miktarda barkod üretmek için gereken süre ve kaynakları azaltmayı sağlar, bu da yüksek getirili uygulamaların gereksinimleri için esastır.

IronBarcode'da paralel işlemenin faydaları nelerdir?

IronBarcode'da paralel işlem kullanımı, birden fazla CPU çekirdeğini iş için kullanarak barkod üretimini hızlandırır, bu da büyük ölçekli barkod görevleri için uygulama performansını iyileştirir ve işlem süresini azaltır.

Çok fazla paralel iş parçacığı ayarlamak performansı olumsuz etkileyebilir mi?

Evet, çok fazla paralel iş parçacığı ayarlamak kaynak çekişmesine ve fazla yüklenmeye yol açabilir, potansiyel olarak performansı düşürebilir. Sistem yeteneklerine uygun dengeli bir yapılandırma bulmak önemlidir.

Paralel iş parçacığı sayısını seçerken hangi faktörler dikkate alınmalıdır?

Dikkate alınmalıdır: kullanılabilir CPU çekirdeklerin sayısı, sistem yükü ve barkod üretim görevlerinizin doğası. Farklı ayarlar deneyerek en iyi yapılandırmayı bulmak en iyisidir.

IronBarcode'da paralel iş parçacıkları için varsayılan bir ayar var mı?

IronBarcode, paralel is parçacıkları için varsayılan bir ayara sahip olabilir, ancak en iyi performansı elde etmek için bu ayarı belirli uygulama ihtiyaçlarınıza göre özelleştirmeniz önerilir.

IronBarcode, iş parçacığı yönetimini nasıl ele alır?

IronBarcode, .NET'in iş parçacığı yeteneklerinden yararlanarak paralel işlemeyi yönetir ve geliştiricilerin performansı etkili bir şekilde optimize etmek için iş parçacığı sayısını belirtmelerine olanak tanır.

Çalışma sırasında paralel iş parçacığı sayısını dinamik olarak değiştirebilir miyim?

Çalışma sırasında paralel iş parçacığı sayısını dinamik olarak değiştirmek önerilmeyebilir çünkü bu tutarsızlıklara neden olabilir ve performans kararlılığını etkileyebilir. Barkod oluşturma işlemine başlamadan önce yapılandırmayı ayarlamak en iyisidir.

Barkod oluşturma işleminde maksimum paralel iş parçacıklarını ayarlamak için bazı yaygın kullanım durumları nelerdir?

Yaygın kullanım durumları arasında envanter yönetim sistemleri, perakende satış noktası sistemleri ve büyük miktarlarda barkod işlemenin önemli olduğu lojistik uygulamaları gibi yüksek hızda barkod oluşturmayı gerektiren uygulamalar bulunmaktadır.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında lisans derecesine sahiptir (Carleton Üniversitesi) ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirme üzerine uzmanlaşmıştır. Kullanıcı dostu ve estetik açıdan hoş arayüzler tasarlamaya tutkuyla bağlı olan Curtis, modern çerç...

Daha Fazlasını Oku
Başlamaya Hazır mısınız?
Nuget İndirmeler 2,169,908 | Sürüm: 2026.4 just released
Still Scrolling Icon

Hala Kaydiriyor musunuz?

Hızlı bir kanit mi istiyorsunuz? PM > Install-Package BarCode
bir örnek çalıştırın dize barkod haline geldiğini görün.