رایانش همزمان
رایانش هم‌رو یا رایانش همزمان نوعی رایانش است که در آن چندین محاسبه به صورت همروند (یعنی در بازه‌های زمانی مشترک و روی‌هم) اجرا می‌شود - به جای آنکه پشت‌سر‌هم باشند (که در این حالت قبل از شروع دومی، اولی باید تمام شود).
محاسبات همزمان نوعی محاسبات است که در آن چندین محاسبه همزمان – در طول مدت زمانی با هم تداخل دارند - به جای اینکه به طور متوالی ، با یک تکمیل قبل از شروع بعدی انجام میشود.
این خاصیت یک سیستم است - چه برنامه ای ، رایانه ای یا شبکه ای - که در آن یک نقطه اجرای جداگانه یا "موضوع کنترل" مجزا برای هر فرآیند وجود دارد .  سیستم همزمان یک سیستم است که در آن محاسبات می تواند پیشرفت کند بدون اینکه منتظر بماند تمام محاسبات دیگر انجام شود. محاسبات همزمان نوعی برنامه نویسی مدولار است. در الگوی خود ، یک محاسبه کلی به زیرمجموعه‌ها تبدیل شده است که ممکن است همزمان انجام شود. پیشگامان در زمینه محاسبات همزمان شامل هموار میشود.
مفهوم محاسبات همزمان اغلب با مفهوم مرتبط اما متمایز محاسبات موازی اشتباه گرفته می شود ، [2] [3] اگرچه هر دو را می توان به عنوان "چندین فرآیند در همان مدت زمان اجرا" توصیف کرد. در محاسبات موازی ، اجرای در همان لحظه فیزیکی اتفاق می افتد: به عنوان مثال ، در پردازنده های جداگانه یک ماشین چند پردازنده ، با هدف سرعت بخشیدن به محاسبات –– محاسبات موازی بر روی یک پردازنده تک (یک هسته ای) غیرممکن است ، زیرا فقط یک محاسبه در هر لحظه ممکن است رخ دهد(در طول هر چرخه ساعت واحد) . در مقابل ،محاسبات همزمان شامل طول عمر فرایند است که با هم همپوشانی دارد ، اما اجرای آن نباید در همان لحظه اتفاق بیفتد. هدف در اینجا الگوبرداری از فرایندهای موجود در دنیای خارج است که همزمان اتفاق می افتد ، مانند چندین مشتری که به طور همزمان به یک سرور دسترسی دارند. ساختار سیستم های نرم افزاری که از چندین قطعه همزمان تشکیل شده اند ، می توانند برای مقابله با پیچیدگی ، صرف نظر از اینکه قطعات به صورت موازی اجرا شوند  می تواند مفید باشد. {4}:1
ببه عنوان مثال ، فرآیندهای همزمان با یکپارچه کردن مراحل اجرای هر فرآیند از طریق برش های به اشتراک گذاری زمان می توانند بر روی یک هسته انجام شوند: فقط یک فرآیند در یک زمان اجرا می شود ، و اگر در طول برش زمانی خود کامل نشود ، متوقف می شود ، فرآیند دیگری متوقف می شود. شروع یا از سر گرفته می شود و بعداً مراحل اصلی از سر گرفته می شود. به این ترتیب ، چندین فرآیند به صورت جزئی در یک لحظه اجرا می شوند ، اما فقط یک فرآیند در آن لحظه اجرا می شود. (نیاز به استناد).
محاسبات همزمان ممکن است به صورت موازی انجام شود ، [2] [5] برای مثال ، با اختصاص هر فرآیند به یک هسته پردازنده یا هسته پردازنده جداگانه ، یا توزیع یک محاسبه در یک شبکه. اما به طور کلی ، زبانها ، ابزارها و تکنیک های برنامه نویسی موازی ممکن است برای برنامه نویسی همزمان مناسب نباشد و بالعکس. (نیاز به استناد)
زمان بندی دقیق اجرای وظایف در یک سیستم همزمان بستگی به زمانبندی دارد و وظایف همیشه نباید همزمان انجام شوند. به عنوان مثال ، با توجه به دو وظیفهT1 و) :T2نیاز به استناد(
T1ممکن است قبل از T2اجرا یا به پایان برسد یا برعکس (سریال و متوالی)
T1و T2 ممکن است بصورت متناوب اجرا شوند (سریال وهمزمان(
T1 و T2 ممکن است همزمان در همان لحظه از زمان اجرا شوند (موازی و همزمان)
کلمه "دنباله" به عنوان یک متضاد برای "همزمان" و "موازی" استفاده می شود. هنگامی که اینها به طور مشخص می شوند ، همزمان / دنباله ای و موازی / سریال به عنوان جفت های مخالف استفاده می شوند. [6] برنامه ای که در آن وظایف یک بار اجرا شود (یک سریال و بدون موازی) بدون در هم آمیختن (پی در پی ، بدون همزمانی: هیچ کاری شروع نمی شود تا اینکه کار قبلی تمام شود) به یک برنامه سریال گفته می شود. مجموعه ای از کارهایی که می توانند به صورت سریال برنامه ریزی شوند ، سریال هستند که کنترل همزمانی را ساده می کند. (نیاز به استناد).
اصلی ترین چالش در طراحی برنامه های همزمان ، کنترل همزمان است: حصول اطمینان از توالی صحیح تعامل یا ارتباطات بین اجرا های مختلف
محاسباتی ، و هماهنگی دسترسی به منابعی که در بین اجرا ها مشترک هستند(5) مشکلات بالقوه شامل شرایط مسابقه ، بن بست و گرسنگی منابع است .به عنوان مثال ، الگوریتم زیر را در نظر بگیرید تا برداشت ها را از یک حساب تأیید نشان داده شده توسط مانده منابع مشترک : 1-  بول برداشت (برداشت داخلی)
2- اگر (تعادل> = برداشت
3- تعادل  = برداشت
4- (بازگشت درست است؛)
5- برگشت خطا
فرض کنید تعادل = 500 ، و دو موضوع همزمان باعث می شود تماسها گرفته(300) و خارج شوند (350). اگر خط 3 در هر دو عملیات قبل از خط 5 اجرا شود ، هر دو عملیات می یابند که تعادل> = برداشت به صورت صحیح ارزیابی می شود و اجرای آن به کم کردن مقدار برداشت ادامه
می یابد. با این حال ، از آنجا که هر دو فرآیند برداشت های خود را انجام می دهند ، در کل مبلغ برداشت شده بیشتر از مانده اصلی خواهد بود. این نوع مشکلات با منابع مشترک از استفاده از کنترل همزمان استفاده می کند یا الگوریتم های غیر مسدود کننده.
مزایای محاسبات همزمان شامل موارد زیر است:
مدل ها برای درک و تجزیه و تحلیل سیستم های محاسبات همزمان شامل موارد زیر است :
ببرای اجرای برنامه های همزمان می توان از چندین روش مختلف استفاده کرد ، مانند اجرای هر یک از اجرای محاسباتی به عنوان یک فرآیند سیستم عامل یا اجرای فرایندهای محاسباتی به عنوان مجموعه موضوعات در یک فرآیند سیستم عامل واحد.
در برخی از سیستم های محاسبات همزمان ، ارتباط بین اجزای همزمان از برنامه نویس پنهان است (به عنوان مثال ، با استفاده از آینده) ، در حالی که در برخی دیگر باید صریحاً اداره شود. ارتباطات صریح را می توان به دو طبقه تقسیم کرد: محاسبات همزمان از سالهای 19 و اوایل قرن 20 از کارهای قبلی در مورد راه‌آهن و تلگراف ایجاد شده است و برخی از اصطلاحات به این دوره مانند سمفورها مربوط است. اینها برای پاسخ به این سؤال است كه چگونه می توان چندین قطار را در همان سیستم راه آهن اداره كرد (جلوگیری از برخورد و حداكثر بهره وری) و چگونگی اداره انتقال چندگانه بر روی یك مجموعه مشخص از سیم (بهبود كارآیی) از جمله از طریق تقسیم زمان چند برابر (1870 ).
مطالعه آکادمیک الگوریتم های همزمان در دهه 1960 آغاز شد و دیجکسترا (1965) به عنوان اولین مقاله در این زمینه شناخته شد و محرومیت متقابل را شناسایی و حل کرد. (7)
همزمانی در محاسبات گسترده است ، از سخت افزار سطح پایین در یک تراشه به شبکه های جهانی رخ می دهد.نمونه های زیر:
در سطح سیستم عامل:
در سطح شبکه، سیستم‌های شبکه به‌طور کلی با ماهیت خود همزمان هستند، زیرا از دستگاه‌های جداگانه تشکیل شده‌اند.
زبانهای برنامه نویسی همزمان زبان های برنامه نویسی هستند که از سازه های زبانی برای همزمانی استفاده می کنند. این سازه ها ممکن است شامل چند رشته ، پشتیبانی از محاسبات توزیع شده ، انتقال پیام ، منابع مشترک (از جمله حافظه مشترک) یا آینده و وعده ها باشد. چنین زبانهایی گاهی به عنوان زبانهای همگرا محور یا زبانهای برنامه نویسی همزمان محور توصیف می شود.
امروزه متداول ترین زبان های برنامه نویسی که دارای سازه های خاص برای همزمانی هستند Java و C # هستند. هر دوی این زبانها اساساً از یک مدل همزمانی حافظه مشترک استفاده میکنند، و از قفل ارائه شده توسط مانیتورها استفاده می شود (اگرچه مدل های ارسال پیام در بالای مدل حافظه مشترک مشترک وجود دارد). از بین زبانهایی که از الگوی همگام سازی پیام انتقال استفاده می کنند  احتمالاً ارلانگ امروزه بیشترین کاربرد را در صنعت دارد.نیاز به استناد.
بسیاری از زبانهای برنامه نویسی همزمان بیشتر به عنوان زبان های تحقیقاتی (به عنوان مثال Picو نه به عنوان زبان هایی برای استفاده در تولید ، توسعه یافته اند.) با این حال زبانهایی مانند ارلانگ ، لیمبو و اوکام در 20 سال گذشته در زمانهای مختلف شاهد استفاده صنعتی بوده اند. زبانهایی که همزمانی نقش مهمی را ایفا می کنند عبارتند از :
هدف کلی Ada با پشتیبانی بومی برای ارسال پیام و همزمانی مبتنی بر نظارت  بر انها هست .
Alefهمزمان با ارسال موضوعات و پیام برای برنامه نویسی سیستم در نسخه های اولیه برنامه 9 از آزمایشگاه های بل انجام میگیرد.1-پترسون و هنسی 2013 ، ص. 503
""Making reliable distributed systems in the presence of software errors"(PDF)"
برنامه نویسی همزمان و موازی در جولیا
https://juliacon.talkfunnel.com/2015/21-concurrent-and-parallel-programming-in-julia
پترسون ، دیوید ا.؛ هنسی ، جان ال (2013). سازمان و طراحی رایانه: رابط سخت افزار / نرم افزار. مجموعه مورگان کافمن در معماری و طراحی رایانه (چاپ 5). مورگان کافمن شابک 978-0-12407886-4 رسانه های مربوط به برنامه نویسی همزمان در Wikimedia Commons
کتابخانه مجازی سیستمهای همزمان می باشد.