Rumah pembangunan bahagian belakang Tutorial C#.Net Cara menggunakan model pengaturcaraan tak segerak dan pengaturcaraan serentak untuk mengendalikan pengagihan tugas dan penyelesaian dalam C#

Cara menggunakan model pengaturcaraan tak segerak dan pengaturcaraan serentak untuk mengendalikan pengagihan tugas dan penyelesaian dalam C#

Oct 09, 2023 am 11:45 AM
Pengaturcaraan serentak Pengaturcaraan tak segerak pengagihan tugas

Cara menggunakan model pengaturcaraan tak segerak dan pengaturcaraan serentak untuk mengendalikan pengagihan tugas dan penyelesaian dalam C#

Cara menggunakan model pengaturcaraan tak segerak dan pengaturcaraan serentak untuk mengendalikan pengagihan tugas dan penyelesaian dalam C#

Pengenalan:
Dalam perisian moden Semasa pembangunan, kita sering menghadapi situasi memproses sejumlah besar tugas, dan tugas-tugas ini mungkin bebas dan tidak mengganggu antara satu sama lain. Untuk meningkatkan prestasi dan kecekapan program, kami berharap dapat memproses tugasan ini secara serentak dan mendapatkan hasil yang sepadan apabila setiap tugasan selesai. Sebagai bahasa pengaturcaraan berorientasikan objek, C# menyediakan model pengaturcaraan tak segerak dan penyelesaian pengaturcaraan serentak Dengan menggunakan ciri ini dengan sewajarnya, pengagihan tugas dan penyelesaian masalah boleh dikendalikan dengan berkesan.

1. Model pengaturcaraan tak segerak
Model pengaturcaraan tak segerak bermaksud bahawa apabila melaksanakan tugas tertentu, utas utama tidak akan disekat, tetapi tugas itu akan diwakilkan secara tidak segerak kepada utas atau kumpulan benang lain . pemprosesan, utas utama boleh terus melakukan operasi lain. Dalam C#, model pengaturcaraan tak segerak boleh dilaksanakan dengan menggunakan kata kunci tak segerak dan menunggu. Berikut ialah contoh menggunakan model pengaturcaraan tak segerak:

static async Task<int> DoSomeWorkAsync()
{
    // 模拟一个耗时操作
    await Task.Delay(1000);
    return 42;
}

static async void Main(string[] args)
{
    Console.WriteLine("开始执行任务");
    int result = await DoSomeWorkAsync();
    Console.WriteLine("任务结果:" + result);
    Console.WriteLine("任务执行完毕");

    // 等待用户输入,防止控制台窗口关闭
    Console.ReadLine();
}
Salin selepas log masuk

Dalam kod di atas, kaedah DoSomeWorkAsync() ialah kaedah tak segerak dan kata kunci await memberitahu pengkompil untuk tidak melaksanakan Tugasan. Kelewatan () kaedah akan menyekat benang utama. Kaedah Main() juga ditandakan sebagai kaedah tak segerak dan menggunakan kata kunci await untuk menunggu keputusan kaedah DoSomeWorkAsync(). Melalui model pengaturcaraan tak segerak, kami boleh terus melakukan operasi lain sementara menunggu tugasan selesai, meningkatkan kelajuan tindak balas program.

2. Pengaturcaraan serentak
Apabila memproses sejumlah besar tugas, pengaturcaraan serentak boleh memanfaatkan sepenuhnya kelebihan pemproses berbilang teras dan meningkatkan kelajuan pemprosesan tugas. Dalam C#, anda boleh menggunakan benang, kumpulan benang, perpustakaan selari tugas, dll. untuk melaksanakan pengaturcaraan serentak.

  1. Thread
    Menggunakan benang untuk pengaturcaraan serentak ialah kaedah yang paling asas. Dengan mencipta berbilang utas dan memberikan tugasan kepada utas ini untuk pelaksanaan serentak, kecekapan pemprosesan boleh dipertingkatkan. Berikut ialah contoh penggunaan benang:
static void DoSomeWork()
{
    Console.WriteLine("线程开始执行任务");
  
    // 模拟耗时操作
    Thread.Sleep(1000);
  
    Console.WriteLine("线程任务执行完毕");
}

static void Main(string[] args)
{
    Console.WriteLine("开始执行任务");
  
    // 创建线程
    Thread thread = new Thread(DoSomeWork);
  
    // 启动线程
    thread.Start();
  
    Console.WriteLine("任务执行中");
  
    // 等待线程执行完毕
    thread.Join();
  
    Console.WriteLine("任务执行完毕");
  
    // 等待用户输入,防止控制台窗口关闭
    Console.ReadLine();
}
Salin selepas log masuk

Dalam kod di atas, kami melaksanakan tugas dengan mencipta urutan baharu dan memulakannya. Melalui kaedah Join() thread, kami boleh memastikan bahawa kami menunggu thread selesai sebelum meneruskan pelaksanaan thread utama.

  1. Kolam Benang
    Menggunakan kumpulan benang ialah kaedah yang lebih cekap dan terurus secara automatik. Kumpulan benang mencipta satu set benang apabila aplikasi dimulakan dan menggunakan semula urutan ini untuk melaksanakan tugas. Berikut ialah contoh penggunaan kumpulan benang:
static void DoSomeWork()
{
    Console.WriteLine("线程开始执行任务");
  
    // 模拟耗时操作
    Thread.Sleep(1000);

    Console.WriteLine("线程任务执行完毕");
}

static void Main(string[] args)
{
    Console.WriteLine("开始执行任务");
  
    // 使用线程池执行任务
    ThreadPool.QueueUserWorkItem(_ => DoSomeWork());
  
    Console.WriteLine("任务执行中");
  
    // 等待用户输入,防止控制台窗口关闭
    Console.ReadLine();
}
Salin selepas log masuk

Dalam kod di atas, kami mewakilkan tugas kepada kumpulan benang untuk dilaksanakan melalui kaedah ThreadPool.QueueUserWorkItem(). Kumpulan benang secara automatik akan memperuntukkan benang terbiar untuk melaksanakan tugas, menghapuskan keperluan untuk membuat dan memulakan benang secara manual.

  1. Task Parallel Library
    The Task Parallel Library (TPL) ialah model pengaturcaraan serentak lanjutan yang diperkenalkan dalam .NET Framework 4. Ia menyediakan satu siri kelas dan kaedah untuk memudahkan pengendalian tugas serentak. Berikut ialah contoh penggunaan perpustakaan selari tugas:
static void DoSomeWork()
{
    Console.WriteLine("任务开始执行");
  
    // 模拟耗时操作
    Thread.Sleep(1000);
  
    Console.WriteLine("任务执行完毕");
}

static void Main(string[] args)
{
    Console.WriteLine("开始执行任务");
  
    // 创建任务
    Task task = new Task(DoSomeWork);
  
    // 启动任务
    task.Start();
  
    Console.WriteLine("任务执行中");
  
    // 等待任务执行完毕
    task.Wait();

    Console.WriteLine("任务执行完毕");
  
    // 等待用户输入,防止控制台窗口关闭
    Console.ReadLine();
}
Salin selepas log masuk

Dalam kod di atas, kami melaksanakan kerja dengan mencipta tugasan (Task). Mulakan tugas dengan memanggil kaedah Mula() dan kemudian gunakan kaedah Tunggu() untuk menunggu tugasan selesai.

3 Pengagihan dan penyelesaian tugas
Dalam aplikasi sebenar, kami mungkin perlu memproses sejumlah besar tugas dan mengagihkan tugas ini kepada berbilang rangkaian atau kumpulan benang untuk pelaksanaan serentak. Berikut ialah contoh kod untuk menunjukkan cara menggunakan model pengaturcaraan tak segerak dan pengaturcaraan serentak untuk mengendalikan pengagihan dan penyelesaian tugas:

static async Task<int> DoSomeWorkAsync()
{
    // 模拟一个耗时操作
    await Task.Delay(1000);
    return 42;
}

static async Task Main(string[] args)
{
    Console.WriteLine("开始执行任务");

    var tasks = new List<Task<int>>();

    for (int i = 0; i < 10; i++)
    {
        tasks.Add(DoSomeWorkAsync());
    }

    // 等待所有任务完成
    await Task.WhenAll(tasks);

    Console.WriteLine("所有任务执行完毕");

    // 输出任务结果
    foreach (var task in tasks)
    {
        Console.WriteLine("任务结果:" + task.Result);
    }

    // 等待用户输入,防止控制台窗口关闭
    Console.ReadLine();
}
Salin selepas log masuk

Dalam kod di atas, kami menggunakan model pengaturcaraan tak segerak untuk mencipta berbilang tugas, dan tambahkan tugasan ini pada senarai tugasan. Tunggu semua tugasan diselesaikan dengan memanggil kaedah Task.WhenAll(), dan kemudian melintasi senarai tugasan untuk mengeluarkan hasil tugasan.

Kesimpulan:
Melalui model pengaturcaraan tak segerak dan pengaturcaraan serentak, kami boleh meningkatkan prestasi dan kecekapan program apabila memproses sejumlah besar tugas. Model pengaturcaraan tak segerak membolehkan kami meneruskan operasi lain sementara menunggu tugasan selesai, manakala pengaturcaraan serentak memanfaatkan sepenuhnya pemproses berbilang teras untuk meningkatkan kelajuan pelaksanaan tugas. Dalam aplikasi praktikal, kita boleh memilih kaedah yang sesuai untuk mengagihkan tugas dan menyelesaikan masalah mengikut situasi tertentu. Kod sampel di atas menyediakan beberapa kaedah dan teknik asas, tetapi aplikasi sebenar mungkin memerlukan kaedah pemprosesan yang lebih terperinci dan kompleks, yang perlu dilaraskan dan dioptimumkan mengikut situasi tertentu.

Rujukan:

  1. C# Model pengaturcaraan tak segerak: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/ concepts /async/
  2. C# Pengaturcaraan selari: https://docs.microsoft.com/en-us/dotnet/standard/parallel-programming/

Atas ialah kandungan terperinci Cara menggunakan model pengaturcaraan tak segerak dan pengaturcaraan serentak untuk mengendalikan pengagihan tugas dan penyelesaian dalam C#. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Reka bentuk struktur data selamat konkurensi dalam pengaturcaraan serentak C++? Reka bentuk struktur data selamat konkurensi dalam pengaturcaraan serentak C++? Jun 05, 2024 am 11:00 AM

Dalam pengaturcaraan serentak C++, reka bentuk struktur data yang selamat serentak adalah penting: Bahagian kritikal: Gunakan kunci mutex untuk mencipta blok kod yang membenarkan hanya satu utas untuk dilaksanakan pada masa yang sama. Kunci baca-tulis: membenarkan beberapa utas dibaca pada masa yang sama, tetapi hanya satu utas untuk ditulis pada masa yang sama. Struktur data tanpa kunci: Gunakan operasi atom untuk mencapai keselamatan serentak tanpa kunci. Kes praktikal: Barisan selamat benang: Gunakan bahagian kritikal untuk melindungi operasi baris gilir dan mencapai keselamatan benang.

Pengaturcaraan serentak C++: bagaimana untuk melaksanakan penjadualan tugas dan pengurusan kolam benang? Pengaturcaraan serentak C++: bagaimana untuk melaksanakan penjadualan tugas dan pengurusan kolam benang? May 06, 2024 am 10:15 AM

Penjadualan tugas dan pengurusan kumpulan benang adalah kunci untuk meningkatkan kecekapan dan kebolehskalaan dalam pengaturcaraan serentak C++. Penjadualan tugas: Gunakan std::thread untuk membuat thread baharu. Gunakan kaedah join() untuk menyertai utas. Pengurusan kolam benang: Buat objek ThreadPool dan nyatakan bilangan utas. Gunakan kaedah add_task() untuk menambah tugas. Panggil kaedah join() atau stop() untuk menutup kumpulan benang.

Pengaturcaraan Serentak C++: Bagaimana untuk mengendalikan komunikasi antara benang? Pengaturcaraan Serentak C++: Bagaimana untuk mengendalikan komunikasi antara benang? May 04, 2024 pm 12:45 PM

Kaedah untuk komunikasi antara benang dalam C++ termasuk: memori dikongsi, mekanisme penyegerakan (kunci mutex, pembolehubah keadaan), paip dan baris gilir mesej. Contohnya, gunakan kunci mutex untuk melindungi pembilang yang dikongsi: mengisytiharkan kunci mutex (m) dan pembolehubah yang dikongsi (pembilang); untuk mengelakkan keadaan perlumbaan.

Penjelasan terperinci tentang primitif penyegerakan dalam pengaturcaraan serentak C++ Penjelasan terperinci tentang primitif penyegerakan dalam pengaturcaraan serentak C++ May 31, 2024 pm 10:01 PM

Dalam pengaturcaraan berbilang benang C++, peranan primitif penyegerakan adalah untuk memastikan ketepatan berbilang utas yang mengakses sumber yang dikongsi Ia termasuk: Mutex (Mutex): melindungi sumber yang dikongsi dan menghalang akses serentak (ConditionVariable): thread Tunggu khusus syarat yang perlu dipenuhi sebelum meneruskan operasi atom: memastikan bahawa operasi dilaksanakan dengan cara yang tidak terganggu.

Pengaturcaraan Serentak C++: Bagaimana untuk mengelakkan kebuluran benang dan penyongsangan keutamaan? Pengaturcaraan Serentak C++: Bagaimana untuk mengelakkan kebuluran benang dan penyongsangan keutamaan? May 06, 2024 pm 05:27 PM

Untuk mengelakkan kebuluran benang, anda boleh menggunakan kunci yang adil untuk memastikan peruntukan sumber yang adil, atau menetapkan keutamaan benang. Untuk menyelesaikan penyongsangan keutamaan, anda boleh menggunakan warisan keutamaan, yang meningkatkan keutamaan utas yang memegang sumber buat sementara waktu atau menggunakan promosi kunci, yang meningkatkan keutamaan utas yang memerlukan sumber.

Masalah dan penyelesaian biasa dalam pengaturcaraan tak segerak dalam rangka kerja Java Masalah dan penyelesaian biasa dalam pengaturcaraan tak segerak dalam rangka kerja Java Jun 04, 2024 pm 05:09 PM

3 masalah dan penyelesaian biasa dalam pengaturcaraan tak segerak dalam rangka kerja Java: Callback Hell: Gunakan Promise atau CompletableFuture untuk mengurus panggilan balik dalam gaya yang lebih intuitif. Perbalahan sumber: Gunakan primitif penyegerakan (seperti kunci) untuk melindungi sumber yang dikongsi dan pertimbangkan untuk menggunakan koleksi selamat benang (seperti ConcurrentHashMap). Pengecualian tidak terkendali: Mengendalikan pengecualian dalam tugas secara eksplisit dan menggunakan rangka kerja pengendalian pengecualian (seperti CompletableFuture.exceptionally()) untuk mengendalikan pengecualian.

Pengaturcaraan Serentak C++: Bagaimana untuk melakukan penamatan dan pembatalan benang? Pengaturcaraan Serentak C++: Bagaimana untuk melakukan penamatan dan pembatalan benang? May 06, 2024 pm 02:12 PM

Mekanisme penamatan dan pembatalan utas dalam C++ termasuk: Penamatan utas: std::thread::join() menyekat utas semasa sehingga utas sasaran menyelesaikan pelaksanaan std::thread::detach() menanggalkan utas sasaran daripada pengurusan utas. Pembatalan utas: std::thread::request_termination() meminta utas sasaran untuk menamatkan pelaksanaan; benang. Dalam pertempuran sebenar, request_termination() membenarkan utas untuk menentukan masa penamatan, dan join() memastikan bahawa pada baris utama

Bagaimanakah rangka kerja golang mengendalikan konkurensi dan pengaturcaraan tak segerak? Bagaimanakah rangka kerja golang mengendalikan konkurensi dan pengaturcaraan tak segerak? Jun 02, 2024 pm 07:49 PM

Rangka kerja Go menggunakan ciri serentak dan tak segerak Go untuk menyediakan mekanisme untuk mengendalikan tugas serentak dan tak segerak dengan cekap: 1. Keselarasan dicapai melalui Goroutine, membolehkan berbilang tugasan dilaksanakan pada masa yang sama 2. Pengaturcaraan tak segerak dilaksanakan melalui saluran, yang boleh dilaksanakan tanpa menyekat utas utama Tugas 3. Sesuai untuk senario praktikal, seperti pemprosesan serentak permintaan HTTP, pemerolehan tak segerak data pangkalan data, dsb.

See all articles