در اکسیر تمام کدها درون فرایندها اجرا میشوند. فرایندها از یکدیگر جدا شده و همزمان با یکدیگر اجرا می شوند و از طریق انتقال پیام ارتباط برقرار می کنند. فرایندها نه تنها مبنای همزمانی در اکسیر هستند بلکه ابزارهایی را برای ساخت برنامه های توزیع شده و تحمل خطا فراهم می کنند.
فرایندهای اکسیر را نباید با فرایندهای سیستم عامل اشتباه گرفت. فرایندهای موجود در اکسیر از نظر حافظه و پردازنده بسیار سبک هستند (حتی در مقایسه با رشته هایی که در بسیاری از زبان های برنامه نویسی دیگر استفاده می شود). به همین دلیل غیر معمول نیست که ده ها یا حتی صدها هزار فرایند به طور همزمان در حال اجرا باشند.
در این فصل ما در مورد ساختارهای اساسی برای ایجاد فرایندهای جدید و همچنین ارسال و دریافت پیام بین فرایندها یاد خواهیم گرفت.
اسپاون
مکانیسم اساسی برای تخم ریزی فرایندهای جدید عملکرد تخم ریزی/1 خودکار وارد شده است:
تخم ریزی/1 عملکردی را انجام می دهد که در فرایند دیگری اجرا می شود.
تخم ریزی توجه/1 گرداند پید (شناسه فرایند). در این مرحله فرایندی که شما ایجاد کرده اید به احتمال زیاد مرده است. فرایند ایجاد شده عملکرد داده شده را اجرا کرده و پس از انجام عملکرد خارج می شود:
توجه: به احتمال زیاد شناسه های فرایند متفاوتی نسبت به شناسه هایی که در این راهنما دریافت می کنیم دریافت خواهید کرد.
ما می توانیم با فراخوانی خود/0 روند فعلی را بازیابی کنیم :
فرایندها وقتی قادر به ارسال و دریافت پیام هستیم بسیار جالب تر می شوند.
ارسال و دریافت
ما می توانیم پیام ها را با ارسال/2 به یک فرایند ارسال کنیم و با دریافت/1 دریافت کنیم :
هنگامی که یک پیام به یک فرایند ارسال, پیام در صندوق پستی روند ذخیره می شود. بلوک دریافت/1 از صندوق پستی روند فعلی عبور می کند و پیامی را جستجو می کند که با هر یک از الگوهای داده شده مطابقت دارد. دریافت/1 از نگهبانان و بسیاری از بندها مانند پرونده/2 پشتیبانی می کند .
فرایندی که پیام را ارسال می کند مسدود نمی شود ارسال/2 , پیام را در صندوق پستی گیرنده قرار می دهد و ادامه می یابد. به خصوص, یک فرایند می تواند پیام به خود ارسال.
اگر هیچ پیام در صندوق پستی تطبیق هر یک از الگوهای وجود دارد, روند فعلی صبر کنید تا یک پیام تطبیق می رسد. ایست همچنین می توانید مشخص شود:
وقفه 0 زمانی می تواند داده شود که از قبل انتظار داشته باشید پیام در صندوق پستی باشد.
بیایید همه را کنار هم بگذاریم و بین فرایندها پیام ارسال کنیم:
تابع بازرسی / 1 برای تبدیل نمایش داخلی ساختار داده به یک رشته معمولا برای چاپ استفاده می شود. توجه کنید که هنگامی که بلوک دریافت اعدام می شود روند فرستنده ما باعث در حال حاضر ممکن است مرده باشد, به عنوان تنها دستورالعمل خود را برای ارسال یک پیام.
در حالی که در پوسته, شما ممکن است پیدا کردن خیط و پیت کردن یاور/0 کاملا مفید. این گرگرفتگی و چاپ تمام پیام ها در صندوق پستی.
پیوندها
اکثرا ما فرایندها را در اکسیر تخم ریزی می کنیم و به صورت فرایندهای مرتبط تخم ریزی می کنیم. قبل از اینکه مثالی را با پیوند تخم ریزی نشان دهیم/1 , بیایید ببینیم وقتی فرایندی با تخم ریزی شروع می شود چه اتفاقی می افتد/1 شکست می خورد:
این صرفا یک خطا وارد اما روند پدر و مادر هنوز هم در حال اجرا. این به این دلیل است که فرایندها منزوی هستند. اگر میخواهیم شکست در یک پروسه به پروسه دیگری گسترش یابد باید این موارد را به هم پیوند دهیم. این کار را می توان با پیوند تخم ریزی / 1 انجام داد :
چون فرایندهای مرتبط هستند, ما در حال حاضر یک پیام گفت: فرایند پدر و مادر را ببینید, که فرایند پوسته است, سیگنال خروج از فرایند دیگری باعث پوسته به خاتمه دریافت کرده است. ایکس این وضعیت را تشخیص می دهد و یک جلسه پوسته جدید را شروع می کند.
پیوند همچنین می تواند به صورت دستی از طریق فراخوانی انجام شود.ارتباط دادن/1 . ما به شما توصیه می کنیم که به ماژول فرایند برای سایر عملکردهای فراهم شده توسط فرایندها نگاهی بیندازید.
فرایندها و پیوندها هنگام ساخت سیستم های مقاوم در برابر خطا نقش مهمی دارند. فرایندهای اکسیر جدا شده اند و به طور پیش فرض چیزی را به اشتراک نمی گذارند. از این رو, شکست در یک فرایند هرگز سقوط خواهد کرد و یا فاسد دولت از فرایند دیگری. پیوندها به فرایندها اجازه می دهند در صورت شکست رابطه برقرار کنند. ما اغلب فرایندهای ما را به سرپرستان پیوند می دهیم که زمانی که یک فرایند می میرد و یک فرایند جدید را در جای خود شروع می کند.
در حالی که زبان های دیگر ما نیاز به گرفتن/رسیدگی به استثنا, در اکسیر ما در واقع خوب با اجازه دادن به فرایندهای شکست چرا که ما انتظار داریم سرپرستان به درستی راه اندازی مجدد سیستم های ما. "شکست سریع" (گاهی اوقات به عنوان "بگذار خراب شود") یک فلسفه رایج هنگام نوشتن نرم افزار اکسیر است!
تخم ریزی/1 و پیوند تخم ریزی/1 اولیه اولیه برای ایجاد فرایندها در اکسیر هستند. اگرچه ما تاکنون به طور انحصاری از این موارد استفاده کرده ایم اما بیشتر اوقات از انتزاعاتی استفاده می کنیم که در بالای این موارد ساخته می شوند. بیایید رایج ترین مورد را ببینیم که وظایف نامیده می شود.
وظایف
وظایف ساخت در بالای توابع تخم ریزی برای گزارش خطا بهتر و درون نگری:
به جای تخم ریزی/1 و تخم ریزی لینک/1, ما با استفاده از کار.شروع/1 و کار.لینک شروع/1 که بازگشت و نه فقط پید. این همان چیزی است که وظایف را در درختان نظارت امکان پذیر می کند. علاوه بر این, وظیفه فراهم می کند توابع راحتی, مانند وظیفه.همگام سازی/1 و وظیفه.منتظر/1 و عملکرد برای سهولت توزیع.
در حال حاضر کافی است به یاد داشته باشید برای استفاده از وظیفه برای دریافت گزارش خطا بهتر است.
دولت
ما در این راهنما تاکنون در مورد ایالت صحبت نکرده ایم. اگر شما در حال ایجاد یک برنامه کاربردی است که نیاز به دولت, مثلا, برای حفظ پیکربندی نرم افزار خود را, یا شما نیاز به تجزیه یک فایل و در حافظه نگه دارید, کجا می خواهد شما را ذخیره?
فرایندها رایج ترین پاسخ به این سوال هستند. ما می توانیم فرایندهایی که حلقه بی نهایت ارسال, حفظ دولت, و ارسال و دریافت پیام. به عنوان مثال اجازه دهید یک ماژول بنویسیم که فرایندهای جدیدی را شروع می کند که به عنوان یک فروشگاه کلید ارزش در یک فایل به نام کیلو ولت کار می کنند.سابق :
توجه داشته باشید که تابع شروع _ لینک شروع می شود یک فرایند جدید اجرا می شود که حلقه/1 تابع, شروع با یک نقشه خالی. عملکرد حلقه/1 (خصوصی) سپس منتظر پیام ها می ماند و عملکرد مناسب را برای هر پیام انجام می دهد. ما حلقه ساخته شده/1 خصوصی با استفاده از دف به جای دف . در مورد یک :دریافت پیام, این یک پیام را به تماس گیرنده می فرستد و حلقه تماس/1 دوباره, برای یک پیام جدید صبر کنید. در حالی که :قرار دادن پیام در واقع فراخوانی حلقه / 1 با یک نسخه جدید از نقشه, با کلید داده شده و ارزش ذخیره شده.
بیایید با دویدن امتحان کنیم ایکس کیلو ولت.سابق :
در ابتدا, نقشه روند هیچ کلید, بنابراین ارسال یک: دریافت پیام و سپس گرگرفتگی روند فعلی صندوق بازده صفر . بیایید ارسال کنیم: پیام را بگذارید و دوباره امتحان کنید:
توجه کنید که چگونه روند نگه داشتن یک دولت و ما می توانیم دریافت و به روز رسانی این دولت با ارسال پیام روند. در واقع هر فرایندی که پید بالا را بشناسد قادر به ارسال پیام و دستکاری دولت خواهد بود.
همچنین امکان ثبت نام پید و دادن نام و اجازه دادن به هرکسی که نام را می داند برای ارسال پیام وجود دارد:
استفاده از فرایندها برای حفظ وضعیت و ثبت نام از الگوهای بسیار رایج در برنامه های اکسیر است. با این حال, بسیاری از اوقات, ما این الگوهای دستی همانطور که در بالا پیاده سازی نیست, اما با استفاده از یکی از بسیاری از انتزاعی که با اکسیر کشتی. مثلا, اکسیر فراهم می کند عوامل, که انتزاع ساده در اطراف دولت هستند:
پاسخ: گزینه نام نیز می تواند به نماینده داده شود.لینک شروع/2 و به طور خودکار ثبت می شود. علاوه بر عوامل, اکسیر فراهم می کند یک رابط کاربری برای ساخت سرورهای عمومی (به نام جنسسرورر ), وظایف, و بیشتر, همه طراحی شده توسط فرایندهای زیر. این درختان به همراه درختان نظارتی با جزییات بیشتری در ترکیب و راهنمای برنامه بررسی خواهند شد که یک برنامه کامل اکسیر را از ابتدا تا انتها ایجاد می کند.
در حال حاضر بیایید به دنیای ورودی/خروجی در اکسیر بپردازیم.
Team 2012-2022 تیم اکسیر. اکسیر و لوگوی اکسیر علامت های تجاری ثبت شده تیم اکسیر هستند.