خانه / Programing / مقدمه ای بر همزمانی در دات نت

مقدمه ای بر همزمانی در دات نت

Introduction on Concurrency in .NET

همانطور که قبلا هم بیان کردم یکی از Concern ها و چالش های مهم در طراحی API Getaway بحث Reactive programming بودن Getaway طراحی شده می باشد. با توجه به misconceive هایی که معمولا موجب گرفتار شدن توسعه دهنده ها و طراحان می شوند؛ در اینجا به مفاهیم مرتبط به همزمانی و مفاهیم و عبارت مرتبط با این concept در دات نت بر اساس کتابی با همین نام از آقای Stephan Cleary پرداخته شده.

قبل از هر چیز باید تعریفی از خود کلمه همزمانی یا Concurrency داشته باشیم.

Concurrency

 

Doing more than one thing at a time.

 

همانطور که از توضیح بالا مشخص می باشد concurrency  یعنی چند عمل و اقدام را بتوان همزمان انجام داد. مزیت های concurrency میتواند کاملا واضح بوده و نیازی به توضیح نداشته باشد. برنامه ای که در حال تعامل با کاربر می باشد تمایل داره در حالی که کاری مثلا پردازش یک فایل یا نوشتن در دیتابیس را انجام می دهد بتواند به سایر درخواست های کاربر پاسخ بدهد. یک برنامه وب هم مثلا میخواهد در حالی که در حال پردازش درخواست فعلی کاربر است بتواند درخواست بعدی کاربر را دریافت و پردازش کند. بطور خلاصه هر زمان که نیاز به این باشد که درحالی که درخواست فعلی را پردازش میکنیم درخواست بعدی را بتوانیم پردازش کنیم، به concurrency نیاز خواهیم داشت.

 

واژه بعدی که همیشه با concurrency  اشتباه گرفته می شود، multithreading می باشد.

 

Multithreading

 

A form of concurrency that uses multiple threads of execution.

 

Multithreading یعنی استفاده از چندین thread جهت پردازش یک عمل. Multithreading یکی از روش های concurrency می باشد. استفاده از thread های سطح OS جهت اجرای همزمان چند دستور که یکی از روش های پیاده سازی concurrency  می باشد .Multithreading بر روی thread pool که مکانیزم برای queue کردن کارها و اجرای این دسته کارها هست، قرار دارد. به این صورت که کارها ابتدا queue شده و سپس thread pool که یک task scheduler محسوب میشود بر اساس منابع در دسترس و الگوریتم های پیاده سازی اقدام به پخش کردن این کارها بین thread ها میکند.

 

Thread pool همچنین منجر به نوع دیگری از concurrency بنام parallel processing می شود

 

Parallel Processing

 

Doing lots of work by dividing it up among multiple threads that run concurrently.

 

Parallel Processing یا Parallel Programming سعی می کند با استفاده از multithreading استفاده از CPU را به حداکثر برساند. CPU های جدید دارای هسته های بیشتری هستند و اگر و در صورتی که کارهای زیادی برای اجرا وجود داشته باشد بکار گرفتن فقط یک هسته چندان معقول نمی باشد. Parallel processing کارها را بین چندین thread که ممکن است بین چندین core پخش شده باشند توزیع می کند.

 

پس بطور خلاصه تا به اینجا باید گفت parallel processing  یک نوع از multithreading  و multithreading  هم نوعی از concurrency  میباشد.

 

نوع دیگر concurrency   که برای توسعه دهنده ها بیشتر آشنا میباشد Asynchronous programming  می باشد.

 

Asynchronous Programming

 

A form of concurrency that uses futures or callbacks to avoid unnecessary threads.

 

یک feature  یا promise یک تایپی هستند که عملیاتی رو بیان می کند که قرار است بعدا به اتمام برسد. نوع های جدید Task و Task<T> بیانگر این نوع دیتا تایپ هستند.

 

Asynchronous programming بر پایه Asynchronous operations بنا نهاده شده. Asynchronous operations بیانگر عملیات یا operation هایی است که شروع شده و مدتی بعد (نا مشخص) به اتمام می رسد. در حالی که operation در حال پردازش است. Thread جاری متوقف نمی شود. و وقتی که عملیات به اتمام رسید operation سعی می کند threadای که باعث شروع آن عملیات شده  را باخبر کند

 

همانطور که احتمالا حدس زده اید Asynchronous programming  در عمل میتواند با چالش های پیاده سازی زیادی مواجه شد. دو عبارت کلیدی async/await سعی در تسهیل پیاده سازی این نوع از concurrency  در برنامه های modern را بر عهده دارند.

Reactive programming هم فرم دیگری از concurrency می باشد. در Asynchronous programming بیان کردیم که برنامه عملیاتی را شروع می کند که مدتی بعد به پایان می رسد. Reactive programming بسیار شبیه به Asynchronous programming می باشد با این تفاوت که این فرم برنامه نویسی بر پایه asynchronous event ها و نه asynchronous operation ها بنا نهاده شده است.

Asynchronous event ها ممکن است بر خلاف asynchronous operation ها در یک زمان خاص شروع نشوند و و همچنین ممکن است چندین و چندین بار raise شوند.

 

Reactive Programming

 

A declarative style of programming where the application reacts to events.

 

اگر بتوان برنامه را به عنوان مجموعه ای از حالت های مختلف در نظر گرفت می توان رفتار برنامه را به شکل یک state machine در نظر گرفت.که به event های با update کردن  State خود واکنش یا reaction نشان می دهد.

درباره ی masoud@admin

همچنین ببینید

ASP NET API Pipeline Part 2

1-بخش اول 2- بخش دوم —————————————————————————————– در بخش اول  بصورت مفصل به بررسی مفهوم Message Handlerها …

ASP NET API Pipeline Part 1

1-بخش اول 2- بخش دوم —————————————————————————————– طی یکسری مقالات به بررسی دقیق pipelineمورد استفاده توسط …

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

در تلگرام هم همراه شما هستم

اگر علاقمند به معماری نرم افزار و مبحث محبوب مایکروسرویس هستید؛ در کانال با ما همراه باشید. اطلاعات مفید زیادی در این کانال انتظار شما را می کشند. فقط کافیست دکمه ی پیوستن را بفشارید.

پیوستن بستن