بسیاری از دولوپرها بر این باورند که Concurrency (کانکارنسی یا همزمانی) و Parallelism (پاراللیزم یا موازات) فرایندهای بسیار پیچیدهای بوده و فقط حرفهایها میتوانند به شکل صحیحی آنها را پیادهسازی کنند.
شاید بهنوعی بتوان گفت که این دو مفهوم فرایندهای پیچیدهای بوده و برای پیادهسازی اصولی آن باید باتجربه بود، اما اگر دولوپری بخواهد برچسب حرفهای روی خود بزند، چارهای جز این ندارد که علاوهبر آشنایی با این مفاهیم، نحوهٔ پیادهسازی آنها در سیستمهایی با تعداد پروسسهای زیاد را هم بلد باشد.
Concurrency چیست؟
بهطور خلاصه، بایستی گفت که منظور از کانکارنسی این است که ۲ یا بیش از ۲ تسک بهصورت همزمان شروع شده، اجرا شوند و درنهایت توسط منابع مشترک -همچون یک پردازنده یا حافظهٔ به اشتراک گذاشته شده- بدون ترتیب خاصی تکمیل گردند. بهعبارت دیگر، زمانیکه یک اپلیکیشن قادر به پردازش حداقل ۲ تسک در یک زمان باشد، آن را اپلیکیشنی کانکارنت (Concurrent) مینامیم.
گرچه بهنظر میرسد که تمامی تسکها بهصورت موازی درحال اجرا هستند اما در عمل اینچنین نیست بلکه بدین شکل است که تسک اول شروع شده سپس به حالت انتظار درمیآید و منابع به تسک دوم اختصاص مییابند و در ادامه سیستمعامل هم براساس اولویت تسکها، سیپییو و دیگر منابع سیستمی همچون مموری در اختیار تسکها قرار داده تا تکمیل گردند.
Parallelism چیست؟
درصورتیکه چندین تسک یا یک تسکی که به چندین بخش تقسیمبندی شده و در آن واحد توسط پردازندهای چندهستهای (Multi-Core) هندل شود ما با Parallelism سروکار داریم بدین شکل که هر هسته به یک تسک یا یکی از بخشهای تسکی که به چندین بخش تقسیمبندی شده اختصاص مییابد.
به خاطر داشته باشید |
در Parallelism ما به سختافزارهایی با پردازندهٔ چندهستهای نیاز داریم و این درحالی است که اگر پردازده صرفاً یک هسته داشته باشد، کانکارنسی اتفاق خواهد افتاد نه پاراللیزم. |
تفاوتهای Concurrency و Parallelism چیست؟
کانکارنسی زمانی است که حداقل ۲ تسک در بازهٔ زمانی Overlapping (رویهم افتاده) شروع، اجرا و تکمیل میگردند درحالیکه پاراللیزم به زمان اطلاق میگردد که تسکها بهمعنای واقعی کلمه در آن واحد -مثلاً در یک پردازندهٔ چندهستهای- اجرا میشوند.
- کانکارنسی مرتبط با اجرای پروسههای مجزا از یکدیگر است درحالیکه پاراللیزم اجرای همزمان تسکهای -احتمالاً- مرتبط است.
- یک اپلیکیشن میتواند کانکارنت باشد اما پارالل نباشد؛ بهعبارت دیگر، چنین اپلیکیشنی بیش از یک تسک را در آن واحد پردازش میکند اما هیچ ۲ تسکی در یک لحظه اجرا نمیشوند.
- یک اپلیکیشن میتواند پارالل باشد اما کانکارنت نباشد؛ بهعبارت دیگر، چنین اپلیکیشنی بخشهای مختلف یک تسک را توسط یک پردازندهٔ چندهستهای در آن واحد پردازش میکند.
- یک اپلیکیشن میتواند نه پارالل باشد و نه کانکارنت؛ بهعبارت دیگر، چنین اپلیکیشنی تمامی تسکها را بهترتیب یکی پس از دیگری پردازش میکند.
- یک اپلیکیشن هم میتواند پارالل باشد و هم کانکارنت؛ بهعبارت دیگر، چنین اپلیکیشنی میتواند چندین تسک را بهصورت همزمان از طریق یک پردازندهٔ چندهستهای در آن واحد پردازش کند.