A waje da / don I/O, .NET yana ba da don — aiwatarwa da lissafin akan cores da yawa. Bambancin mahimmanci: / shine don I/O concurrency (jiyya ba tare da jirgon kudu ba), yayin da , , da PLINQ suna don parallelizing CPU-intensive aiki.
A waje da / don I/O, .NET yana ba da don — aiwatarwa da lissafin akan cores da yawa. Bambancin mahimmanci: / shine don I/O concurrency (jiyya ba tare da jirgon kudu ba), yayin da , , da PLINQ suna don parallelizing CPU-intensive aiki.
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 yana shirya aiki akan thread pool thread — yi amfani da shi don parallelizing CPU-bound computation (BA don I/O, inda async/await ke nan tare da isassun babu dagara threads).
// 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 da PLINQ (.AsParallel()) suna raba aiki a kan cores cikin kowa — kyau don CPU-heavy processing na items da suka shigge. (Kawai yana da mahimmanci don gaske CPU-bound, babbar aiki — akwai cikin iska.)
// 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
Saninsu Tasks da parallelism a waje da async/await shi ne mahimmancin ilimin senior-level don gina C# applications na gida, da bambancin mahimmanci tsakanin I/O concurrency da CPU parallelism shine mahimmin labari — babbar jimlar gida. async/await yana shiga I/O-bound concurrency (sakin threads a lokacin jira) amma ba yana ƙara CPU parallelism ba, yayin da CPU-bound aiki (lissafin, sarrafa bayanai) yana samun amfani daga gaske parallelism a kan cores ta hanyar Task.Run (bugawa CPU aiki zuwa thread pool threads), Parallel.For/ForEach, da PLINQ (.AsParallel()).
Sanin kula da kuri'a - async/await don I/O, kayan aikin TPL parallelism don CPU-bound aiki - shi ne mahimmanci don ingantaccen optimization na aiki, tunda yin amfani da jiya daya (misali sanin async don hanzari lissafin, ko kawo saida threads don I/O da async ke sarrafa kyau) ba yana aiki ba.
Kuma mahimmanci ne tunawa da thread safety: parallel code da ake buguwa bayanai da suka raba suna buƙata synchronization (lock, Interlocked don atomic operations, ko thread-safe collections kamar ConcurrentDictionary) don guzare ga race conditions — mahimmin aladun daidai a parallel code.
Saninsu I/O-vs-CPU bambanci, kayan aikin parallelism (Task.Run, Parallel, PLINQ), da thread-safety requirements shi ne arzikin aiki don rubuta daidai, ingantaccen concurrent da parallel C#.
Tunda zamani applications sau-sau suna buƙa duka I/O concurrency da CPU parallelism, da tun zaen zaien daidai na hanyar nuni da sarrafa thread safety cikin kyau ne abin da ke saida parallel code ingantaccen da daidai, wannan shi ne mahimmin, sau-sau relevant senior ilimin don performance-sensitive C# development.