در دنیای ۰ و ۱ هم مشابه بقیه رشتهها و موضوعات، واژههای تخصصی زیادی وجود دارد ولی بعضی از این واژهها کمی پر تکرارتر و البته پر کاربردتر از بقیه هستند.
در توسعه نرمافزار و سیستمهای پردازنده، مفاهیمی وجود دارند که مکمل هم هستند و یا در کنار هممعنی میدهند؛ برای مثال Concurrency و Parallelism، مفاهیم Thread و Processes و مفاهیم Sync و Async. در این مقاله قصد داریم تا ابتدا به تعریف این مفاهیم و ارتباط آنها با یکدیگر به کمک مثالهای ملموس بپردازیم و سپس کاربرد آنها را در سیستمها بررسی کنیم. با ما همراه باشید.
Concurrency & Parallelism
ابتدا دو مفهوم Concurrency (همزمانی) و parallelism (موازیسازی) و تفاوت این دو تعریف را که در نگاه اول بسیار مشابهاند، بررسی میکنیم.
Concurrency (همزمانی)
فرض کنید که شما میخواهید همزمان ساندویچ بخورید و آواز بخوانید. کاری که انجام میدهید، خوردن ساندویچ، سپس آواز خواندن و دوباره خوردن ساندویچ است. شما در واقع دارید دو کار مختلف را همزمان (concurrently) با هم انجام میدهید. مبحث Concurrency یعنی انجام همزمان چندین کار (multiple tasks) در یک بازه زمانی یکسان و نه لزوما در یک زمان کاملا یکسان (simultaneously).
در اپلیکیشنها، همزمانی به این معناست که یک برنامه در حال اجرای یک تسک است و به محض انجام تسک قبلی، تسک بعدی را انجام دهد. در دنیای کامپیوتر این مفهوم نسبت به تعداد پردازندههای سیستم میتواند متفاوت عمل کند.
در سیستمهای تک پردازنده، concurrency به وسیله context-switching انجام میشود اما در سیستمهایی با چندین پردازنده، concurrency (همزمانی) با مفهوم parallelism (موازی سازی) تعریف میشود که در ادامه به این موضوع میپردازیم.
Parallelism (موازیسازی)
این بار فرض کنید که میخواهید دو کار دیگر را همزمان انجام دهید؛ مثل پختن غذا و تلفنی صحبت کردن با دوستتان.
شما میتوانید همزمان که مشغول آشپزی هستید با تلفن صحبت کنید و به معنی واقعی کلمه، در حال انجام دو کار در یک زمان مشخص و یکسان هستید.
موضوع Parallelism در دنیای کامپیوتر به معنای شروع یک کار قبل از اتمام کار قبلی است که به شما امکان انجام کارها را به صورت کاملا همزمان (simultaneously) میدهد.
پس توجه داشته باشید که در سیستمهای چند هستهای ما به خودی خود Concurrency را داریم ولی در محیطهای تک هستهای، به کمک context switching میتوانیم این امکان را بدست بیاوریم.
Threads & Processes
برای استفاده از مفاهیم ذکر شده، نیاز است که اشارهای به دو مفهوم Thread (رشته) و Process (فرایند) داشته باشیم و بدانیم یک برنامه چطور شروع به کار میکند.
Thread
Threadها در واقع توالی اجرای کد هستند که به وسیله سیستم عامل اجرا میشوند و همچنین میتوانند به صورت مستقل از هم اجرا شوند. یک برنامه میتواند single thread یا multi-thread باشد.
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.com | www.codewala.net | www.youtube.com
دیدگاهتان را بنویسید