Parallel.ForEach, PLINQ
Jalankan kerja secara selari dengan Parallel.ForEach dan bina saluran paip selari dengan PLINQ (AsParallel, WithDegreeOfParallelism, AsOrdered).
Parallel.ForEach, PLINQ ialah pelajaran Akademi C# percuma di CoddyKit. Ini ialah pelajaran 1 daripada 3. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Akademi C#, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Akademi C# merangkumi sejumlah 3 pelajaran.
Mengapa gelung selari
Matlamat: Gunakan CPU dengan lebih baik.
- Parallel.ForEach: tindakan bagi setiap item
- PLINQ: pertanyaan selari dengan operator
- Kawal tahap pemprosesan selari
- Berhati-hati dengan kesan sampingan
Asas Parallel.ForEach
Parallel.ForEach mengagihkan lelaran merentas utasan; setiap item menjalankan tindakan yang diberikan.
using System;
using System.Threading.Tasks;
public class Program
{
public static void Main(string[] args)
{
int[] data = new int[] { 1, 2, 3, 4, 5, 6 };
// Runs iterations concurrently on thread pool
Parallel.ForEach(data, x =>
{
int y = x * x; // small CPU work
Console.WriteLine("x=" + x + " y=" + y + " on " + Environment.CurrentManagedThreadId);
});
}
}
Kawal pemprosesan selari
Gunakan ParallelOptions.MaxDegreeOfParallelism untuk mengehadkan keserentakan apabila sumber adalah terhad.
using System;
using System.Threading;
using System.Threading.Tasks;
public class Program
{
public static void Main(string[] args)
{
int[] data = new int[] { 1, 2, 3, 4, 5, 6 };
ParallelOptions opt = new ParallelOptions();
opt.MaxDegreeOfParallelism = 2; // limit concurrency
Parallel.ForEach(data, opt, x =>
{
Console.WriteLine("Start " + x);
Thread.Sleep(150); // simulate work
Console.WriteLine("Done " + x);
});
}
}
Saluran paip PLINQ
PLINQ menjalankan operator LINQ secara selari. ForAll menggunakan hasil secara serentak (tanpa susunan).
using System;
using System.Linq;
public class Program
{
public static void Main(string[] args)
{
int[] nums = Enumerable.Range(1, 20).ToArray();
// Filter then project in parallel
var query =
nums
.AsParallel()
.WithDegreeOfParallelism(2)
.Where(n => n % 2 == 0)
.Select(n => n * n);
// ForAll consumes in parallel; order not guaranteed
query.ForAll(sq => Console.WriteLine(sq));
}
}
Kawalan susunan
Gunakan AsOrdered untuk mengekalkan susunan; AsSequential beralih kembali kepada LINQ satu utasan apabila diperlukan.
using System;
using System.Linq;
public class Program
{
public static void Main(string[] args)
{
int[] nums = new int[] { 5, 4, 3, 2, 1 };
// Preserve original sequence order for the output
var ordered =
nums.AsParallel().AsOrdered().Select(n => n * 10).ToArray();
// Switch back to sequential for a section if needed
var seq =
nums.AsParallel().Select(n => n + 1).AsSequential().Where(n => n > 3).ToArray();
Console.WriteLine("Ordered: " + string.Join(",", ordered));
Console.WriteLine("Sequential tail: " + string.Join(",", seq));
}
}
Keselamatan & petua
Petua:
- Elakkan keadaan boleh ubah yang dikongsi; utamakan fungsi tulen.
- Gunakan koleksi selamat untuk utasan jika anda mesti menulis data.
- Lakukan kelompok yang lebih besar dan bukannya item kerja yang kecil.
- Ukur prestasi: pemprosesan selari membantu kerja terikat CPU, bukan penantian I/O.
Parallel.ForEach berbanding PLINQ
Imbas kembali
Imbas kembali: Gunakan Parallel.ForEach untuk tindakan bagi setiap item; gunakan PLINQ untuk membina pertanyaan selari, mengawal keserentakan dan, secara pilihan, mengekalkan susunan.
Pelajari C# dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 93
- Pelajaran
- 346
Soalan Lazim
Adakah pelajaran “Parallel.ForEach, PLINQ” percuma?
Ya — teks penuh “Parallel.ForEach, PLINQ” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Akademi C#, tingkat taraf kepada CoddyKit PRO. Kursus Akademi C# merangkumi sejumlah 3 pelajaran.
Apakah yang akan saya pelajari dalam “Parallel.ForEach, PLINQ”?
Jalankan kerja secara selari dengan Parallel.ForEach dan bina saluran paip selari dengan PLINQ (AsParallel, WithDegreeOfParallelism, AsOrdered). Anda berlatih Akademi C# menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Akademi C#?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Akademi C# di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 3.
Berapa lamakah pelajaran “Parallel.ForEach, PLINQ” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Akademi C# ini?
Ya. Setiap pelajaran Akademi C# menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Parallel.ForEach, PLINQ
- Pengeluar/pengguna dengan Channels (gambaran keseluruhan)
- Pertukaran kadar pemprosesan berbanding kependaman