Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Hadkan Paralelisme Semasa Memproses Mesej dalam C#?

Bagaimanakah Saya Boleh Hadkan Paralelisme Semasa Memproses Mesej dalam C#?

DDD
DDDasal
2024-12-30 17:55:10783semak imbas

How Can I Limit Parallelism When Processing Messages in C#?

Menghadkan Keselarian Maksimum dalam Pemprosesan Mesej dengan C#

Apabila memproses koleksi item yang besar secara selari, selalunya wajar untuk mengawal bilangan maksimum tugas yang boleh dijalankan serentak. Ini membantu mengoptimumkan penggunaan sumber dan menghalang sistem yang membebankan.

Menggunakan kod sampel yang disediakan, yang berpusing melalui koleksi 1,000 mesej input dan memulakan tugas untuk setiap satu, sukar untuk meramalkan bilangan sebenar mesej yang akan diproses secara selari. Walau bagaimanapun, pada pemproses empat teras biasa, berbilang mesej mungkin akan diproses secara serentak.

Menghadkan Keselarian Maksimum

Untuk mengehadkan bilangan maksimum mesej yang diproses pada satu masa , kaedah Parallel.ForEach dengan pilihan MaxDegreeOfParallelism boleh digunakan. Pilihan ini menentukan bilangan maksimum benang yang boleh digunakan untuk pelaksanaan selari. Sebagai contoh, kod di bawah mengehadkan bilangan tugas selari kepada 10:

Parallel.ForEach(messages, new ParallelOptions { MaxDegreeOfParallelism = 10 },
msg =>
{
    // logic
    Process(msg);
});

Mengekalkan Urutan

Dalam kod di atas, mesej mungkin tidak semestinya diproses dalam susunan yang sama di mana ia muncul dalam koleksi. Untuk memastikan urutan yang ketat, kaedah sambungan AsParallel boleh digunakan:

var orderedMessages = messages.AsParallel();
Parallel.For(0, orderedMessages.Count(), i =>
{
    Process(orderedMessages[i]);
});

Dalam kod ini, kaedah Parallel.For mencipta gelung yang berulang ke atas koleksi secara selari, tetapi dalam setiap lelaran, mesej itu diproses diakses secara berurutan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Hadkan Paralelisme Semasa Memproses Mesej dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn