درک مفاهیم concurrency، parallelism، threads، processes، async و sync با مثال‌هایی در زندگی واقعی

10 دقیقه زمان مطالعه
1402/10/27
1 نظر

در دنیای ۰ و ۱ هم مشابه بقیه رشته‌ها و موضوعات، واژه‌های تخصصی زیادی وجود دارد ولی بعضی از این واژه‌ها کمی پر تکرارتر و البته پر کاربردتر از بقیه هستند.
در توسعه نرم‌افزار و سیستم‌های پردازنده، مفاهیمی وجود دارند که مکمل هم هستند و یا در کنار هم‌معنی می‌دهند؛ برای مثال Concurrency و Parallelism، مفاهیم Thread و Processes و مفاهیم Sync و Async. در این مقاله قصد داریم تا ابتدا به تعریف این مفاهیم و ارتباط آن‌ها با یکدیگر به کمک مثال‌های ملموس بپردازیم و سپس کاربرد آن‌ها را در سیستم‌ها بررسی کنیم. با ما همراه باشید.

Concurrency & Parallelism

ابتدا دو مفهوم Concurrency (همزمانی) و parallelism (موازی‌سازی) و تفاوت این دو تعریف را که در نگاه اول بسیار مشابه‌اند، بررسی می‌کنیم.

Concurrency (همزمانی)

فرض کنید که شما ‌می‌خواهید همزمان ساندویچ بخورید و آواز بخوانید. کاری که انجام ‌می‌دهید، خوردن ساندویچ، سپس آواز خواندن و دوباره خوردن ساندویچ است. شما در واقع دارید دو کار مختلف را همزمان (concurrently) با هم انجام ‌می‌دهید. مبحث Concurrency یعنی انجام همزمان چندین کار (multiple tasks) در یک بازه زمانی یکسان و نه لزوما در یک زمان کاملا یکسان (simultaneously).

Concurrency

در اپلیکیشن‌ها، همزمانی به این معناست که یک برنامه در حال اجرای یک تسک است و به محض انجام تسک قبلی، تسک بعدی را انجام دهد. در دنیای کامپیوتر این مفهوم نسبت به تعداد پردازنده‌های سیستم ‌می‌تواند متفاوت عمل کند.

Concurrency

در سیستم‌های تک پردازنده، concurrency به وسیله context-switching انجام ‌می‌شود اما در سیستم‌هایی با چندین پردازنده، concurrency (همزمانی) با مفهوم parallelism (موازی سازی) تعریف می‌شود که در ادامه به این موضوع ‌می‌پردازیم.

Parallelism (موازی‌سازی)

این بار فرض کنید که ‌می‌خواهید دو کار دیگر را همزمان انجام دهید؛ مثل پختن غذا و تلفنی صحبت کردن با دوستتان.

شما ‌می‌توانید همزمان که مشغول آشپزی هستید با تلفن صحبت کنید و به معنی واقعی کلمه، در حال انجام دو کار در یک زمان مشخص و یکسان هستید.

موضوع Parallelism در دنیای کامپیوتر به معنای شروع یک کار قبل از اتمام کار قبلی است که به شما امکان انجام کارها را به صورت کاملا همزمان (simultaneously) ‌می‌دهد.

parallelism

پس توجه داشته باشید که در سیستم‌های چند هسته‌ای ما به خودی خود Concurrency را داریم ولی در محیط‌های تک هسته‌ای، به کمک context switching ‌می‌توانیم این امکان را بدست بیاوریم.

Threads & Processes

برای استفاده از مفاهیم ذکر شده، نیاز است که اشاره‌ای به دو مفهوم Thread (رشته) و Process (فرایند) داشته باشیم و بدانیم یک برنامه چطور شروع به کار می‌کند.

Thread

Thread‌ها در واقع توالی اجرای کد هستند که به وسیله سیستم عامل اجرا ‌می‌شوند و همچنین ‌می‌توانند به صورت مستقل از هم اجرا شوند. یک برنامه ‌می‌تواند single thread یا multi-thread باشد.

Threads & Processes

Process

یک Process یک نمونه از برنامه در حال اجرا است. یک برنامه ‌می‌تواند چندین Process   داشته باشد. همچنین یک برنامه برای شروع با یک Thread شروع ‌می‌شود ولی در ادامه ‌می‌تواند چندین Thread را برای انجام کارهای مختلف درگیر کند.

Synchronous and Asynchronous

در این بخش هم دو تعریف Synchronous (همزمان) و Asynchronous (غیرهمزمان) را بررسی می‌کنیم و سپس مثال‌هایی از هر کدام از جفت تعاریف را می‌بینیم.

Synchronous

فرض کنید شما ‌می‌خواهید یک نامه برای مادر و یک نامه دیگر برای پدرتان بنویسید. شما نمی‌توانید در آن واحد هر دو نامه را بنویسید و برای این کار نیاز است که ابتدا یک نامه را بنویسید و سپس به سراغ نوشتن نامه دیگر بروید.

در مدل synchronous programming، تسک‌ها یکی پس از دیگری انجام ‌می‌شود و هر تسک برای انجام شدن صبر ‌می‌کند تا تسک قبلی به اتمام برسد.

Asynchronous

حال فرض کنید که شما همزمان که در حال خوردن ساندویچ هستید، لباس‌هایتان را در ماشین لباسشویی ‌‌می‌‌اندازید و دکمه شروع شستشو را ‌می‌زنید. حالا همزمان که ماشین لباسشویی در حال شستن است، شما منتظر اتمام شستشو نمی‌مانید و به ادامه ساندویچ خوردن مشغول ‌می‌شوید. در این حالت شما همزمان در حال انجام دو کار به صورت asynchronously هستید.

در مدل asynchronous programming، شما منتظر اتمام تسک‌ها نمی‌مانید و در حین انجام تسک‌ها می‌توانید بین آن‌ها جا به جا شوید.

تفاوت Synchronous و Asynchronous در محیط‌های single و multi-threaded

در این بخش تفاوت فرایندهای همزمان و غیر همزمان را در محیط‌های تک رشته‌ای (Single Thread) و چند‌ رشته‌ای (Multi-Thread) بررسی می‌کنیم.

فرایند همزمان (Synchronous)

تک رشته (Single Threaded)

همزمان تک رشته

چند رشته (Multi-Threaded)

همزمان چند رشته

فرایند غیر همزمان (Asynchronous)

تک رشته (Single Threaded)

غیر همزمان تک رشته

چند رشته (Multi-Threaded)

غیر همزمان چند رشته

 

منابع:

www.medium.com | www.softwareengineering.stackexchange.com | www.stackoverflow.comwww.codewala.net | www.youtube.com

۴.۸/۵ - (۶ امتیاز)
نویسنده: یک توسعه‌دهنده دات‌نت خلاق، علاقه‌مند به چالش، ورزش، مطالعه و توسعه فردی

مطالب مرتبط