اینم یه تجربه پراکنده دیگه!
به نظر میرسه که من در توییتر گفتم که میخوام در مورد کلا async و روندهای پیاده سازی اون توی وبلاگ بنویسم.
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>خیلی هوس کردم یه چیز سنگین در مورد async و مدلهاش توی زبونهای مختلف بنویسم ولی ذات شیرازیم نمیذاره.
— Abbas Yazdanpanah (@yazdanpanaha) December 19, 2015
از اونجایی هم که من هنوز هم علم رو دوست دارم رفتم یکم عمیق تر نگاه کردم ببینم کل این ماجرا از کجا آب میخوره رسیدم به چیزی به نام process calculus یا همون حسابان پروسهها! بالاخره علما آدمهای پایهای هستن که میان و خیلی عمیق و گاها عجیب به مسائل نگاه میکنن. کل ماجرا از این قراره که در این علم تلاش شده که بصورت formal سیستم های همروند یا concurent توصیف بشن و روابط بین پروسهها مختلف در این سیستمها نحوه تعاملشون رو توصیف و تفصیل بشه.
قبل از اینکه بیشتر توضیح بدم توجه داشته باشید که این متن یه متن کاملا علمی نیست بلکه آن چیزی هست که من با چند ساعت مطالعه یاد گرفتم. پس این سرنخ باشه برای اهلش.
با توجه به خوندنهای من به نظر میرسه که همه راهها طبق معمولا با آقای تورینگ میرسه. ایشون اولین کسی هستن که تئوری محاسبه پذیری رو بسط دادن و ماشین تورینگ یکی از چیزهایی است که توی اون تعریف کردن. حالا توی این حسابان پروسهها پا اندکی فراتر گذاشته میشه و سعی میکنه که پروسههای محاسباتی و ارتباط بین اونها رو در سیستمهای همروند توصیف کنه. جالب اینه که این علم شاخههای مختلف و گسترده ای داره و برخلاف علوم معمول که یه علم پایههست و بسط داده میشه دانشمندان مختلفی تئوریهای مختلفی گفتن و زمان مشخص کرده که همه اونها سعی در مدل کردن یک چیز دارن و به این مجموعه گفتن حسابان پروسه!
سه ویژگی اصلی هست که توی تمام این روشهای مدل سازی اینه که:
- همه اونها از کانالها و روندهای انتقال پیام به جای تغییر متغیرهای مشترک برای تعامل استفاده میکنند
- پروسهها و سیستمها رو به کمک یک سری مفاهیم اولیه و عملگرهایی که این مفاهیم اولیه رو ترکیب میکنند، تعریف میکنند.
- قوانین جبری برای عملگرهای پروسهها تعریف کرده که باعث میشوند عبارتهای این حسابان به کمک استدلال معادله ای تغییر کنند.
همه این مدلهاهم توصیفی از کانال ارتباطی ارائه میکنند که ابزاری برای ارتباط به حساب میاند. هم چنین عملگرهایی برای بوجود آوردن پروسههای جدید از پروسههای قدیمی مورد نیاز هست که معمولا این عملگرها عبارتند از:
- ترکیب موازی: این عملگر باعث میشه که دو پروسه بتونن بصورت موازی و غیر وابسته اجرا بشن. همچنین این پروسهها به کمک یک کانال مشترک با هم تعامل دارند. کانالها بصورت همزمان یا غیرهمزمان هستند.
- ارتباطات: تعاملات معمولا یک جریان جهتدار اطلاعات هست. معمولا هم بین ورودیها و خروجیها تفاوت آشکاری قائل شده اند. معمولا هم جریان دادهها از خروجیها به سمت وردیهاست از طریق یک کانال است.
- ترکیب ترتیبی: بعضی وقتها تعاملات میان پروسهها بایستی از نظر زمانی مرتب باشند. معمولا عملگر ترتیب به ورودیها یا خروجیها یا هردو اعمال میشود.
- قوانین تبدیل: معمولا قوانینی برای تبدیل یک عبارت که در آن عملگرهای بالا استفاده شده اند به یک عبارت معادل در یک حسابان پروسه تعریف میشود.
- مخفی سازی: حقیقتا خودم خیلی متوجه نشدم. اما به نظر میرسه در مورد این باشه که پروسههای نمیدونن که با چند نفر تعامل دارن اما نقاط تعامل میدونن که چند نفر با هم در تعاملن.
- بازگشت و تکرار: برای تعریف روندهای نامتناهی با مجموعه ای از قوانین متناهی به بازگشت و تکرار نیاز هست.
- پروسه null: یک پروسه که هیچ کاری نمیکنه و با هیچکس تعاملی نداره ولی در روند استدلال مورد نیازه.
شاخههای اصلی این علم سه دسته هستند که عبارتند از موارد زیر. این موارد رو تنها برای اونهایی که دوست دارن بیشتر بدونن آوردم
- حسابان سیستمهای در ارتباط یا Calculus of Communicating Systems(CCS)
- ارتباط سیستمهای ترتیبی یا Communicating Sequential Processes (CSP)
- جبر پروسههای در ارتباط یا Algebra of Communicating Processes (ACP)
من بیشتر مطالب رو مبتنی بر اونچه که توی ویکیپیدیا خوندم آوردم ولی پیشنهاد میکنم اگه این موضوع علاقهتون رو جلب کرد موارد زیر رو هم نگاهی بندازید:
- یه صفحه که چندتا منبع رو معرفی میکنه
- یه سری اسلاید که روش CCS رو یاد میده
- یه مقدمه خوب و علمی که کلا ماجرا رو در ۳۵ صفحه مرور میکنه
- یه صفحه دیگه که منابع مخلتفی رو معرفی میکنه.