1- مفهوم و تفاوت Concurrency(همزمانی) و Parallel(موازی):
- پردازش Parallel نوعی از Concurrent هستش. درواقع Parallel زیرمجموعه Concurrency هستش.
- نوع Concurrent میتونه با یک پردازنده اعمال بشه (single/multi thread). اما نوع Parallel باید در چند پردازنده اعمال بشه. یعنی یک پردازنده به ازای هر پروسس.
نکته: عمل Multithreading زیرمجموعه Concurrency محسوب میشه و میتونه با پردازندههای تکی هم انجام بشه.
2- با استفاده از کلمه کلیدی volatile
در متغیرها می تونید thread های برنامه رو وادار کنید تا اطلاعات متغیر رو مستقیماً از حافظه بخونن و نه کش CPU. (این عمل درواقع نوعی thread-safety محسوب میشه)
3- یادتون باشه که synchronized
و Thread-Safe در .Net یک مفهوم دارن: دسترسی همزمان به کد توسط چند Thread بدون بروز مشکلات. یعنی کد/متد synchronized
اجازه دسترسی همزمان چند Thread به کد/متد رو نمیده، پس Thread ها باید نوبتی به کد/متد دسترسی پیدا کنن بنابراین آخرین وضعیت کد/متد در همه Thread ها مشترک هستش.
نکته: این مسئله فقط در مورد برنامه های Multi-Thread صدق میکنه و نه Single-Thread.
نکته 2: در .Net باید از تکنیکهایی مانند lock
برای Thread-Safe کردن کد استفاده کرد.