رایانش همزمان

**رایانش هم‌رو** یا **رایانش همزمان**  نوعی رایانش است که در آن چندین محاسبه به صورت همروند (یعنی در بازه‌های زمانی مشترک و روی‌هم) اجرا می‌شود - به جای آنکه پشت‌سرهم باشند (که در این حالت قبل از شروع دومی، اولی باید تمام شود).

محاسبات همزمان نوعی محاسبات است که در آن چندین محاسبه همزمان – در طول مدت زمانی با هم تداخل دارند - به جای اینکه به‌طور متوالی، با یک تکمیل قبل از شروع بعدی انجام می‌شود.

این خاصیت یک سیستم است - چه برنامه ای، رایانه‌ای یا شبکه ای - که در آن یک نقطه اجرای جداگانه یا «موضوع کنترل» مجزا برای هر فرایند وجود دارد. سیستم همزمان یک سیستم است که در آن محاسبات می‌تواند پیشرفت کند بدون اینکه منتظر بماند تمام محاسبات دیگر انجام شود. محاسبات همزمان نوعی برنامه‌نویسی مدولار است. در الگوی خود، یک محاسبه کلی به زیرمجموعه‌ها تبدیل شده‌است که ممکن است همزمان انجام شود. پیشگامان در زمینه محاسبات همزمان شامل هموار می‌شود.

## مقدمه
مفهوم محاسبات همزمان اغلب با مفهوم مرتبط اما متمایز محاسبات موازی اشتباه گرفته می‌شود ، [۲] [۳] اگرچه هر دو را می‌توان به عنوان «چندین فرآیند در همان مدت زمان اجرا» توصیف کرد. در محاسبات موازی، اجرای در همان لحظه فیزیکی اتفاق می‌افتد: به عنوان مثال: در پردازنده‌های جداگانه یک ماشین چند پردازنده، با هدف سرعت بخشیدن به محاسبات –– محاسبات موازی بر روی یک پردازنده تک (یک هسته‌ای) غیرممکن است، زیرا فقط یک محاسبه در هر لحظه ممکن است رخ دهد (در طول هر چرخه ساعت واحد). در مقابل، محاسبات همزمان شامل طول عمر فرایند است که با هم همپوشانی دارد، اما اجرای آن نباید در همان لحظه اتفاق بیفتد. هدف در اینجا الگوبرداری از فرایندهای موجود در دنیای خارج است که همزمان اتفاق می‌افتد، مانند چندین مشتری که به‌طور همزمان به یک سرور دسترسی دارند. ساختار سیستم‌های نرم‌افزاری که از چندین قطعه همزمان تشکیل شده‌اند، می‌توانند برای مقابله با پیچیدگی، صرف‌نظر از اینکه قطعات به صورت موازی اجرا شوند می‌تواند مفید باشد. {۴}:۱

ببه عنوان مثال، فرآیندهای همزمان با یکپارچه کردن مراحل اجرای هر فرایند از طریق برش‌های به اشتراک گذاری زمان می‌توانند بر روی یک هسته انجام شوند: فقط یک فرایند در یک زمان اجرا می‌شود، و اگر در طول برش زمانی خود کامل نشود، متوقف می‌شود، فرایند دیگری متوقف می‌شود. شروع یا از سر گرفته می‌شود و بعداً مراحل اصلی از سر گرفته می‌شود. به این ترتیب، چندین فرایند به صورت جزئی در یک لحظه اجرا می‌شوند، اما فقط یک فرایند در آن لحظه اجرا می‌شود. (نیاز به استناد).

محاسبات همزمان ممکن است به صورت موازی انجام شود ، [۲] [۵] برای مثال، با اختصاص هر فرایند به یک هسته پردازنده یا هسته پردازنده جداگانه، یا توزیع یک محاسبه در یک شبکه. اما به‌طور کلی، زبانها، ابزارها و تکنیک‌های برنامه‌نویسی موازی ممکن است برای برنامه‌نویسی همزمان مناسب نباشد و بالعکس. (نیاز به استناد)

زمان‌بندی دقیق اجرای وظایف در یک سیستم همزمان بستگی به زمانبندی دارد و وظایف همیشه نباید همزمان انجام شوند. به عنوان مثال، با توجه به دو وظیفهT1 و) :T2نیاز به استناد(

T1ممکن است قبل از T2اجرا یا به پایان برسد یا برعکس (سریال و متوالی)

T1و T2 ممکن است به‌صورت متناوب اجرا شوند (سریال و همزمان(

T1 و T2 ممکن است همزمان در همان لحظه از زمان اجرا شوند (موازی و همزمان)
*
کلمه «دنباله» به عنوان یک متضاد برای «همزمان» و «موازی» استفاده می‌شود. هنگامی که اینها به‌طور مشخص می‌شوند، همزمان / دنباله ای و موازی / سریال به عنوان جفت‌های مخالف استفاده می‌شوند. [۶] برنامه ای که در آن وظایف یک بار اجرا شود (یک سریال و بدون موازی) بدون در هم آمیختن (پی در پی، بدون همزمانی: هیچ کاری شروع نمی‌شود تا اینکه کار قبلی تمام شود) به یک برنامه سریال گفته می‌شود. مجموعه ای از کارهایی که می‌توانند به صورت سریال برنامه‌ریزی شوند، سریال هستند که کنترل همزمانی را ساده می‌کند. (نیاز به استناد).

### هماهنگی دسترسی به منابع مشترک
اصلی‌ترین چالش در طراحی برنامه‌های همزمان ، کنترل همزمان است: حصول اطمینان از توالی صحیح تعامل یا ارتباطات بین اجراهای مختلف

محاسباتی، و هماهنگی دسترسی به منابعی که در بین اجراها مشترک هستند(۵) مشکلات بالقوه شامل شرایط مسابقه، بن‌بست و گرسنگی منابع است. به عنوان مثال، الگوریتم زیر را در نظر بگیرید تا برداشت‌ها را از یک حساب تأیید نشان داده شده توسط مانده منابع مشترک:

# بول برداشت (برداشت داخلی)
# اگر (تعادل> = برداشت
# تعادل  = برداشت
# (بازگشت درست است)
# برگشت خطا
فرض کنید تعادل = ۵۰۰، و دو موضوع همزمان باعث می‌شود تماسها گرفته(۳۰۰) و خارج شوند (۳۵۰). اگر خط ۳ در هر دو عملیات قبل از خط ۵ اجرا شود، هر دو عملیات می‌یابند که تعادل> = برداشت به صورت صحیح ارزیابی می‌شود و اجرای آن به کم کردن مقدار برداشت ادامه

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

### مزایا
مزایای محاسبات همزمان شامل موارد زیر است:
* افزایش توان عملیاتی برنامه **execution** اجرای موازی یک برنامه همزمان اجازه می‌دهد تعداد وظایف انجام شده در یک زمان معین متناسب با تعداد پردازنده‌ها مطابق قانون گوستافسون افزایش یابد. پاسخگویی بالا برای برنامه‌های ورودی / خروجی — ورودی / خروجی فشرده بیشتر برای انجام عملیات ورودی یا خروجی صبر می‌کنند. برنامه‌نویسی همزمان اجازه می‌دهد تا زمان صرف شده برای انتظار برای یک کار دیگر استفاده شود. ساختار برنامه مناسب تر برخی از مشکلات و دامنه‌های مشکل از مناسب برای نمایش به عنوان وظایف یا فرآیندهای همزمان مناسب هستند. (نیاز به استناد).

مدل‌ها برای درک و تجزیه و تحلیل سیستم‌های محاسبات همزمان شامل موارد زیر است:
* مدل بازیگر
** مدل قابلیت شی برای امنیت
* خودکار / ورودی
* حافظه کاربردی نرم‌افزار (STM)
* پتری
* محاسبات فرایند مانند
** حساب محیطی
** حساب سیستمهای ارتباطی (CCS)
** ارتباط فرایندهای متوالی (CSP)
** پیوستن به حساب
** π- حساب

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

### تعامل و ارتباطات
در برخی از سیستم‌های محاسبات همزمان، ارتباط بین اجزای همزمان از برنامه‌نویس پنهان است (به عنوان مثال، با استفاده از آینده)، در حالی که در برخی دیگر باید صریحاً اداره شود. ارتباطات صریح را می‌توان به دو طبقه تقسیم کرد:

; ارتباطات حافظه مشترک
: مؤلفه‌های همزمان با تغییر محتوای مکان‌های حافظه مشترک (نمونه‌هایی از جاوا و سی شارپ) ارتباط برقرار میکنند این سبک از برنامه‌نویسی همزمان معمولاً برای هماهنگی بین موضوعات نیاز به استفاده از نوعی از قفل کردن (به عنوان مثال، صدا زدن، سمفورها یا مانیتورها) دارد. گفته می‌شود، برنامه ای که به‌طور صحیح هر یک از این موارد را پیاده‌سازی می‌کند، بدون خطر است.

; ارتباط عبور پیام
: مؤلفه‌های همزمان با تبادل پیام‌ها ارتباط برقرار می‌کنند (نمونه‌هایی ازMPI , GO, Scala Erlang و(occam. تبادل پیام ممکن است به صورت غیر همزمان انجام شود یا ممکن است از یک سبک «همزمان» همزمان استفاده شود که در آن فرستنده تا زمان دریافت پیام مسدود می‌شود. ارسال پیام ناهمزمان ممکن است قابل اعتماد یا غیرقابل اعتماد باشد (که گاهی به آن «ارسال و دعا» نیز گفته می‌شود). استدلال همگام سازی پیام بسیار آسان‌تر از استدلال در حافظه مشترک است، و به‌طور معمول یک شکل قوی تر از برنامه‌نویسی همزمان تلقی می‌شود. [نیاز به استناد] طیف گسترده‌ای از تئوری‌های ریاضی برای درک و تحلیل سیستم‌های ارسال پیام در دسترس است. از جمله مدل بازیگر و حسابگرهای مختلف انتقال پیام می‌تواند از طریق پردازش متقارن متقارن، با یا بدون انسجام حافظه پنهان حافظه مشترک، به‌طور مؤثر اجرا شود. حافظه مشترک و همزمانی ارسال پیام ویژگی‌های عملکرد متفاوتی دارند. به‌طور معمول (اگرچه نه همیشه)، سربار حافظه در هر فرایند و سربار تغییر وظیفه در سیستم ارسال پیام کمتر است، اما سربار انتقال پیام از تماس مکالمه بیشتر است. این اختلافات غالباً تحت تأثیر عوامل دیگر عملکرد قرار دارد.

## تاریخچه
محاسبات همزمان از سالهای ۱۹ و اوایل قرن ۲۰ از کارهای قبلی در مورد راه‌آهن و تلگراف ایجاد شده‌است و برخی از اصطلاحات به این دوره مانند سمفورها مربوط است. اینها برای پاسخ به این سؤال است که چگونه می‌توان چندین قطار را در همان سیستم راه‌آهن اداره کرد (جلوگیری از برخورد و حداکثر بهره‌وری) و چگونگی اداره انتقال چندگانه بر روی یک مجموعه مشخص از سیم (بهبود کارایی) از جمله از طریق تقسیم زمان چند برابر (۱۸۷۰).

مطالعه آکادمیک الگوریتم‌های همزمان در دهه ۱۹۶۰ آغاز شد و دیجکسترا (۱۹۶۵) به عنوان اولین مقاله در این زمینه شناخته شد و محرومیت متقابل را شناسایی و حل کرد. (۷)

## شیوع
همزمانی در محاسبات گسترده‌است، از سخت‌افزار سطح پایین در یک تراشه به شبکه‌های جهانی رخ می‌دهد. نمونه‌های زیر:
* کانال
* کوروتین
* آینده و وعده‌ها

در سطح سیستم عامل:
* وظیفه رایانه، اعم از وظیفه مشترک چند وظیفه ای و پیشگیرانه تقسیم
** زمانیکه پردازش دسته ای متوالی مشاغل را با استفاده همزمان از یک سیستم جایگزین می‌کند.
* روند
* نخ

در سطح شبکه، سیستم‌های شبکه به‌طور کلی با ماهیت خود همزمان هستند، زیرا از دستگاه‌های جداگانه تشکیل شده‌اند.

## زبانهایی که از برنامه‌نویسی همزمان پشتیبانی می‌کنند
زبانهای برنامه‌نویسی همزمان زبان‌های برنامه‌نویسی هستند که از سازه‌های زبانی برای همزمانی استفاده می‌کنند. این سازه‌ها ممکن است شامل چند رشته، پشتیبانی از محاسبات توزیع شده ، انتقال پیام، منابع مشترک (از جمله حافظه مشترک) یا آینده و وعده‌ها باشد. چنین زبانهایی گاهی به عنوان زبانهای همگرا محور یا زبانهای برنامه‌نویسی همزمان محور توصیف می‌شود.

امروزه متداول‌ترین زبان‌های برنامه‌نویسی که دارای سازه‌های خاص برای همزمانی هستند Java و C # هستند. هر دوی این زبانها اساساً از یک مدل همزمانی حافظه مشترک استفاده می‌کنند، و از قفل ارائه شده توسط مانیتورها استفاده می‌شود (اگرچه مدل‌های ارسال پیام در بالای مدل حافظه مشترک مشترک وجود دارد). از بین زبانهایی که از الگوی همگام سازی پیام انتقال استفاده می‌کنند احتمالاً ارلانگ امروزه بیشترین کاربرد را در صنعت دارد. نیاز به استناد.

بسیاری از زبانهای برنامه‌نویسی همزمان بیشتر به عنوان زبان‌های تحقیقاتی (به عنوان مثال Picو نه به عنوان زبان‌هایی برای استفاده در تولید، توسعه یافته‌اند) با این حال زبانهایی مانند ارلانگ، لیمبو و اوکام در ۲۰ سال گذشته در زمانهای مختلف شاهد استفاده صنعتی بوده‌اند. زبانهایی که همزمانی نقش مهمی را ایفا می‌کنند عبارتند از:

هدف کلی Ada با پشتیبانی بومی برای ارسال پیام و همزمانی مبتنی بر نظارت بر آنها هست.

Alefهمزمان با ارسال موضوعات و پیام برای برنامه‌نویسی سیستم در نسخه‌های اولیه برنامه ۹ از آزمایشگاه‌های بل انجام می‌گیرد.

## یادداشت
* این تخفیف موازی داخلی یک هسته پردازنده، مانند خطوط لوله یا دستورالعمل‌های بردار شده‌است. یک ماشین تک هسته ای یک هسته ای ممکن است قادر به موازی بودن مانند پردازنده پردازنده باشد، اما پردازنده به تنهایی چنین نیست.

## منابع
۱-پترسون و هنسی ۲۰۱۳، ص. ۵۰۳

*"Making reliable distributed systems in the presence of software errors"(PDF)*

برنامه‌نویسی همزمان و موازی در جولیا

پترسون، دیوید ا. هنسی، جان ال (۲۰۱۳). سازمان و طراحی رایانه: رابط سخت‌افزار / نرم‌افزار. مجموعه مورگان کافمن در معماری و طراحی رایانه (چاپ ۵). مورگان کافمن شابک ۹۷۸-۰-۱۲۴۰۷۸۸۶-۴ رسانه‌های مربوط به برنامه‌نویسی همزمان در Wikimedia Commons

کتابخانه مجازی سیستمهای همزمان می‌باشد.

## پیوند به بیرون
* 
* Concurrent Systems Virtual Library

رده:اختراع‌های هلندی
رده:ادسخر دیکسترا
رده:رایانش همروند
رده:فناوری‌های سیستم‌عامل
رده:ویکی‌سازی رباتیک