Beyond / untuk I/O, .NET nagayakaken kanggo — ndamel komputasi ing sanajroning rong inti. Bedane kaweruh: / iku kanggo I/O concurrency (waiting tanpa pausing), dene , , lan PLINQ iku kanggo parallelizing pekerjaan CPU-intensive.
Beyond / untuk I/O, .NET nagayakaken kanggo — ndamel komputasi ing sanajroning rong inti. Bedane kaweruh: / iku kanggo I/O concurrency (waiting tanpa pausing), dene , , lan PLINQ iku kanggo parallelizing pekerjaan CPU-intensive.
asyncawaitasyncawaitTask.RunParallelasync/await → I/O-bound concurrency. Frees the thread during waits (DB, network).
Does NOT add CPU parallelism.
Parallelism → CPU-bound work spread across MULTIPLE CORES (computation, processing).
Use Task.Run, Parallel.For/ForEach, PLINQ.
// run a CPU-intensive computation on a thread pool thread (don't block the caller)
int result = await Task.Run(() => ExpensiveComputation());
// run multiple in parallel and combine
var tasks = items.Select(item => Task.Run(() => Process(item)));
var results = await Task.WhenAll(tasks); // wait for all
Task.Run njadhwalake pekerjaan ing thread pool thread — gunakaken kanggo parallelize komputasi CPU-bound (DUDU kanggo I/O, kene async/await wis cukup tanpa thread tambahan).
// Parallel.For/ForEach — process a collection across cores
Parallel.ForEach(items, item => Process(item)); // automatically uses multiple cores
Parallel.For(0, 1000, i => Compute(i));
// PLINQ — parallel LINQ
var results = data.AsParallel().Where(x => IsValid(x)).Select(Transform).ToList();
Parallel.For/ForEach lan PLINQ (.AsParallel()) sacara otomatis nyebarake pekerjaan menyang inti — iku apik kanggo memproses CPU-heavy saka item-item independen. (Mung makna kanggo pekerjaan CPU-bound sabenere lan gedhé — ana overhead.)
// parallel code accessing SHARED state needs synchronization or thread-safe types
lock (_lock) { _counter++; } // lock for mutual exclusion
Interlocked.Increment(ref _counter); // lock-free atomic
var dict = new ConcurrentDictionary<string, int>(); // thread-safe collection
Pamahaman Tasks lan parallelism beyond async/await iku ilmu tingkatan senior penting kanggo mbangun aplikasi C# sing performant, lan bedane penting antarane I/O concurrency lan CPU parallelism iku wawasan kunci — titik kebingungan umum. async/await ngurus I/O-bound concurrency (mbebasake thread samangsane waits) nanging dudu nambah CPU parallelism, dene pekerjaan CPU-bound (komputasi, pemrosesan data) entuk kauntungan saka parallelism sebenarnya ing sanajroning inti liwat Task.Run (ngalih pekerjaan CPU menyang thread pool threads), Parallel.For/ForEach, lan PLINQ (.AsParallel()).
Ngerti piranti endi sing cocog — async/await kanggo I/O, alat parallelism TPL kanggo pekerjaan CPU-bound — iku perlu kanggo optimalisasi performa efektif, amarga nggunakaken sing salah (v.g. ngarep-arep async ngusud komputasi, utawa ngluwihi thread kanggo I/O sing async ngurus kanthi efisien) iku ora epektif.
Sama penting iku pamahaman thread safety: kode paralel sing akses state babagan padha kudu sinkronisasi (lock, Interlocked kanggo operasi atomik, utawa koleksi thread-safe kaya ConcurrentDictionary) kanggo nyingkiri race conditions — kepedulian correctness kritis ing kode paralel.
Pamahaman bedane I/O-vs-CPU, alat parallelism (Task.Run, Parallel, PLINQ), lan persyaratan thread-safety iku makna kanggo nulis C# concurrent lan parallel sing bener, performant.
Amarga aplikasi modern asring butuh concurrency I/O lan parallelism CPU, lan amarga milih pendekatan bener lan nangani thread safety kanthi bener iku sing ndadekake kode paralel efektif lan bener, iki iku ilmu senior penting, gampang-gampangne relevan kanggo pengembangan C# sing sensitip performa.