Tugas dan selari

Patricia Arquette
Patricia Arquetteasal
2025-01-26 12:03:09780semak imbas

Task and Parallel

Artikel ini meneroka perbezaan utama antara

dan Parallel.ForEach keluarga (khusus Task, Task.WhenAll, dan lain -lain) dalam C#. Kedua -duanya memudahkan pelaksanaan kod serentak atau selari, tetapi aplikasi, tingkah laku, dan pengendalian tugas mereka berbeza dengan ketara. Task.Run

Parallel.Foreach:

, ahli ruang nama Parallel.ForEach, membolehkan lelaran selari ke atas koleksi. Ia secara automatik mengedarkan beban kerja di seluruh benang yang ada di dalam kolam benang, membuktikan sangat cekap untuk operasi terikat CPU. System.Threading.Tasks

Ciri -ciri Utama:

  • Pelaksanaan selari: lelaran berjalan serentak pada pelbagai benang.
  • Reliance Pool Thread: Ia memanfaatkan kolam thread; anda tidak langsung menguruskan penciptaan benang atau jangka hayat.
  • Operasi segerak (lalai): blok pelaksanaan sehingga keseluruhan koleksi diproses.
  • Pengoptimuman tugas terikat CPU: paling sesuai untuk operasi intensif CPU di mana benang beroperasi secara bebas.

Contoh:

<code class="language-csharp">using System;
using System.Threading.Tasks;

class Program
{
    static void Main(string[] args)
    {
        var items = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

        Parallel.ForEach(items, item =>
        {
            // Simulate CPU-intensive task (e.g., complex calculation)
            Console.WriteLine($"Processing item: {item} on thread {Task.CurrentId}");
        });

        Console.WriteLine("All items processed.");
    }
}</code>

Tugas (Task.Run, Task.Whenall):

dan Task.Run menawarkan kawalan berbutir ke atas pelaksanaan asynchronous dan selari. Walaupun Task.WhenAll boleh mengimbangi kerja terikat CPU, ia sering dipasangkan dengan kod tak segerak untuk tugas-tugas I/O. Task.Run

Ciri -ciri Utama:

  • Pelaksanaan Asynchronous: Tugas terutamanya mengendalikan pengaturcaraan asynchronous, terutamanya operasi I/O yang terikat (panggilan rangkaian, akses pangkalan data).
  • Pengurusan tugas: tugas dibuat secara manual, diuruskan, dan ditunggu (menggunakan , Task.WhenAll). Task.WhenAny Fleksibiliti yang dipertingkatkan:
  • Tugas boleh dibuat dan diuruskan secara individu atau dalam kumpulan, menyediakan kawalan halus.
  • Pengoptimuman tugas I/O-terikat:
  • walaupun boleh digunakan untuk tugas-tugas yang terikat CPU,
  • cemerlang dalam senario yang memerlukan tingkah laku tak segerak. Task.Run
  • Contoh:

<code class="language-csharp">using System;
using System.Threading.Tasks;

class Program
{
    static void Main(string[] args)
    {
        var items = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

        Parallel.ForEach(items, item =>
        {
            // Simulate CPU-intensive task (e.g., complex calculation)
            Console.WriteLine($"Processing item: {item} on thread {Task.CurrentId}");
        });

        Console.WriteLine("All items processed.");
    }
}</code>

Perbezaan utama diringkaskan:

Ciri paralel.foreach Task.run / Task.Whenall
Feature Parallel.ForEach Task.Run / Task.WhenAll
Primary Use Case Parallel iteration for CPU-bound tasks. Asynchronous and parallel execution (CPU/I/O).
Thread Control Less control; uses the thread pool. Full control over task creation and execution.
Execution Type Synchronous (blocking). Asynchronous (non-blocking unless awaited).
Task Type CPU-bound tasks (parallel for loop). General-purpose tasks (CPU-bound or I/O-bound).
Parallelism Parallelism Parallel or asynchronous.
Error Handling Exceptions thrown per iteration. Task.WhenAll aggregates exceptions.
Performance Automatic performance tuning. Manual task distribution management.
Kes penggunaan utama
lelaran selari untuk tugas-tugas terikat CPU. pelaksanaan asynchronous dan selari (CPU/I/O).

Kawalan Thread

Kurang kawalan; menggunakan kolam benang. Kawalan penuh ke atas penciptaan tugas dan pelaksanaan. Jenis pelaksanaan segerak (menyekat). Asynchronous (tidak menyekat kecuali ditunggu).
    jenis tugas
tugas-tugas terikat CPU (selari untuk gelung). Tugas umum (CPU-bound atau I/O-bound).

Parallelism

Parallelism selari atau asynchronous. Parallel.ForEach Pengendalian ralat Pengecualian yang dibuang setiap lelaran. Pengecualian agregat.
    Prestasi
Penalaan prestasi automatik. Pengurusan Pengagihan Tugas Manual.
  • memilih alat yang betul:
  • Gunakan Bila: Task.Run Task.WhenAll anda mempunyai tugas terikat CPU yang boleh dibahagikan kepada unit kerja bebas.

      Parallelization automatik merentasi pelbagai benang adalah dikehendaki.
    • pelaksanaan segerak boleh diterima.
  • Gunakan /
    apabila:

    tugas-tugas I/O terikat terlibat.

    kawalan berbutir ke atas pengurusan tugas, pembatalan, atau penyegerakan diperlukan. Parallel.ForEach Task.Run menggabungkan paralelisme dan asynchrony diperlukan. Task.WhenAll

    Kesimpulan: sangat baik untuk tugas-tugas terikat CPU yang memerlukan kawalan minimum. dan memberikan fleksibiliti yang lebih besar, menjadikannya ideal untuk tugas-tugas CPU yang terikat dan I/O, membolehkan gabungan kesesuaian dan paralelisme dengan kawalan halus.

    Atas ialah kandungan terperinci Tugas dan selari. 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