بازی با فرایندها در اکسیر

  • 2021-01-19

مفهوم کلیدی سازمانی اکسیر یک مولفه مستقل است که از توابع ساخته شده است که پیام ها را ارسال و دریافت می کند.

Mill

میل (منبع: سوکو)

این گزیده ای از معرفی اکسیر توسط سیمون سنت لوران و جی ایزنبرگ است.

اکسیر یک زبان کاربردی است اما برنامه های اکسیر به ندرت حول کارکردهای ساده ساختار می یابند. بجای, مفهوم کلیدی سازمانی اکسیر فرایند است, یک مولفه مستقل (ساخته شده از توابع) که می فرستد و دریافت پیام. برنامه ها به عنوان مجموعه ای از فرایندهایی که با یکدیگر ارتباط برقرار می کنند مستقر می شوند. این رویکرد توزیع کار را در چندین پردازنده یا رایانه بسیار ساده تر می کند و همچنین امکان انجام کارهایی مانند به روزرسانی برنامه ها را بدون خاموش کردن کل سیستم فراهم می کند.

استفاده از این ویژگی ها به معنای یادگیری نحوه ایجاد (و پایان دادن) فرایندها و نحوه ارسال پیام در میان پیام ها و نحوه اعمال قدرت تطبیق الگو در پیام های دریافتی است.

سریعتر یاد بگیرید. عمیق تر حفاری کنید. دورتر را ببینید.

اضافه کردن پلت فرم یادگیری اوریلی اینترنتی. دریافت یک محاکمه رایگان امروز و پیدا کردن پاسخ در پرواز, و یا استاد چیزی جدید و مفید.

پوسته یک فرایند است

شما تاکنون در یک فرایند واحد در سراسر این کتاب کار کرده اید پوسته اکسیر. البته هیچ یک از نمونه های قبلی پیام های ارسالی یا دریافتی ندارند اما پوسته مکانی ساده برای ارسال و (حداقل برای اهداف تست) دریافت پیام است.

اولین چیزی که به اکتشاف شناسه فرایند اغلب به نام پید است . ساده ترین پید به خود است, بنابراین در پوسته شما فقط می توانید سعی کنید خود () تابع:

سه عدد صحیح سه گانه ای را تشکیل می دهند که یک شناسه منحصر به فرد برای این فرایند فراهم می کند. شما ممکن است مجموعه ای متفاوت از اعداد هنگامی که شما را امتحان کنید. این گروه از اعداد در این دوره از اکسیر منحصر به فرد هستند و در استفاده های بعدی برای همیشه یکسان نیستند. اکسیر از پیدها به صورت داخلی استفاده می کند اما در حالی که می توانید در پوسته بخوانید نمی توانید پیدها را مستقیما در پوسته یا توابع تایپ کنید. اکسیر بسیار ترجیح می دهد که شما با پدها به عنوان انتزاع رفتار کنید.

پد ها حتی می توانند فرایندهای در حال اجرا بر روی رایانه های مختلف را در یک خوشه شناسایی کنند. شما نیاز به انجام کار بیشتر به راه اندازی یک خوشه, اما شما نمی خواهد که به دور انداختن کد شما نوشت با پد و فرایندهای ساخته شده بر روی ان زمانی که شما وجود دارد.

هر فرایندی پید مخصوص به خود را دارد و این پیدها مانند نشانی صندوق های پستی عمل می کنند. برنامه های شما پیام ها را از یک فرایند به فرایند دیگر ارسال می کنند. هنگامی که این فرایند می شود زمان برای بررسی صندوق پستی خود را, قادر به بازیابی و پردازش پیام وجود دارد خواهد بود.

اکسیر, با این حال, هرگز گزارش خواهد داد که یک پیام ارسال شکست خورده, حتی اگر پید به یک فرایند واقعی اشاره نمی. همچنین گزارش نمی دهد که یک پیام توسط یک فرایند نادیده گرفته شده است. شما باید اطمینان حاصل کنید که فرایندهای شما به درستی مونتاژ شده اند.

نحو ارسال پیام بسیار ساده است. شما با استفاده از ارسال/2 تابع با دو استدلال, یک عبارت حاوی پید و پیام:

خط 2 پیامی را به پوسته حاوی اتم ارسال کرد: تست 1 . خط 3 پید برای پوسته اختصاص داده, بازیابی با خود() تابع, به یک متغیر به نام پید , و سپس خط 4 استفاده می شود که متغیر پید برای ارسال یک پیام حاوی اتم :تست 2 . (عملکرد ارسال/2 همیشه پیام را برمی گرداند, به همین دلیل است که درست بعد از ارسال در خطوط 2 و 4 ظاهر می شود.)

از کجا کسانی که پیام رفتن? چه اتفاقی افتاد به? در حال حاضر فقط در صندوق پستی شل منتظر هستند و هیچ کاری نمی کنند.

یک تابع پوسته وجود دارد —فلاش () - که می توانید برای دیدن موارد موجود در صندوق پستی استفاده کنید اما این پیام ها را از صندوق پستی نیز حذف می کند. اولین باری که استفاده می کنید گزارشی از موارد موجود در صندوق پستی دریافت خواهید کرد اما بار دوم پیام ها از بین رفته اند و قبلا خوانده شده اند:

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

تا حالا, خیلی خوب. با این حال, اگر شما پیچ کردن—اگر یک پیام در انتظار وجود ندارد, و یا اگر شما یک بازی الگوی فراهم می کند که کار نمی کند—پوسته فقط نشستن وجود دارد, معلق. در واقع, منتظر رسیدن چیزی به صندوق پستی است (از نظر فنی, دریافت بلوک تا زمانی که پیامی دریافت کند), اما گیر خواهید کرد. ساده ترین راه این است که ضربه سیپوش+گرم, و سپس نوع س . شما باید به راه اندازی مجدد ایکس. ( ایکس و بله متغیرهای مقید می شوند و اگرچه تغییرناپذیر نیستند اما در روحیه برنامه نویسی تابعی استفاده مجدد در نظر گرفته می شود.)

فرایندهای تخم ریزی از ماژول ها

در حالی که ارسال پیام به پوسته یک راه ساده برای دیدن چه اتفاقی می افتد, به خصوص مفید نیست. فرایندها در قلب خود فقط توابع هستند و شما می دانید که چگونه توابع را در ماژول ها ایجاد کنید. دریافت. بیانیه پایان مانند یک مورد ساختار یافته است. بیانیه پایان, بنابراین شروع کار ساده است.

مثال 1-1, است که در چ09 / سابق 1-ساده, نشان می دهد ساده—بیش از حد ساده—ماژول حاوی یک تابع است که گزارش پیام دریافت.

مثال 1-1. تعریف فرایند بیش از حد ساده

وقتی تابع گزارش/0 پیامی را دریافت می کند گزارش می دهد که دریافت کرده است. تنظیم این به معنای کامپایل ماژول و سپس استفاده از عملکرد تخم ریزی/3 است که عملکرد را به یک فرایند مستقل تبدیل می کند. استدلال هستند نام ماژول, نام تابع (به عنوان یک اتم), و یک لیست از استدلال برای تابع. حتی اگر شما هر گونه استدلال ندارد, شما نیاز به شامل یک لیست خالی در پرانتز مربع. تابع تخم ریزی / 3 خواهد پید بازگشت, که شما باید در یک متغیر ضبط (اینجا, پید ):

هنگامی که شما روند باعث, شما می توانید یک پیام به پید که ارسال, و روند گزارش خواهد داد که این پیام را دریافت:

اما یک مشکل کوچک وجود دارد. روند گزارش خارج شد-فقط یک بار بند دریافت را طی کرد و وقتی انجام شد انجام شد. اگر شما سعی می کنید برای ارسال روند یکی دیگر از پیام, شما به عقب بر گردیم پیام, و هیچ چیز یک خطا گزارش, اما شما نیز هر گونه اطلاع رسانی که پیام دریافت شد چرا که هیچ چیز گوش دادن دیگر هیچ نیست:

برای ایجاد یک فرایند است که پردازش پیام را نگه می دارد, شما نیاز به اضافه کردن یک تماس بازگشتی, همانطور که در بیانیه دریافت در مثال نشان داده شده است 1-2 (در چ09/سابق 2-بازگشت ).

مثال 1-2. یک تابع که یک فرایند پایدار ایجاد می کند

این فراخوان اضافی برای گزارش () به این معنی است که پس از تابع پیام را نشان می دهد که وارد, دوباره اجرا خواهد شد, اماده برای پیام بعدی. اگر شما کامپایل مجدد ماژول گزاف گویی و تخم ریزی به یک متغیر جدید پید2, شما می توانید پیام های متعدد به روند ارسال, همانطور که در اینجا نشان داده شده:

به دلیل فرایندهای ناهمزمان هستند, خروجی از ارسال/2 ممکن است قبل از خروجی از گزارش ظاهر می شود/0 .

شما همچنین می توانید یک باتری از تماس عبور به تماس اگر شما می خواهید, برای یک مثال ساده, برای پیگیری چگونه بسیاری از پیام های این فرایند دریافت شده است. مثال 1-3 نشان می دهد علاوه بر این از یک استدلال, در این مورد فقط یک عدد صحیح می شود که با هر تماس افزایش. می توانید در پیشخوان 09/سابق 3 پیدا کنید .

مثال 1-3. یک تابع که یک شمارنده را به گزارش پیام خود اضافه می کند

نتایج بسیار قابل پیش بینی, اما به یاد داشته باشید که شما نیاز به شامل یک مقدار اولیه در لیست استدلال در تخم ریزی/3 زنگ زدن:

هر چه شما در پاسخ بازگشتی خود را انجام, ساده نگه داشتن (و ترجیحا دم بازگشتی) بهتر است, به عنوان این توابع می توانید بسیاری از نام, چند بار در زندگی یک فرایند .

اگر شما می خواهید برای ایجاد فرایندهای بی تاب است که پس از انتظار یک مقدار معین از زمان برای یک پیام را متوقف, شما باید پس از ساختار بند دریافت بررسی.

می توانید این تابع را به روشی کمی متفاوت بنویسید که ممکن است اتفاقات را واضح تر و راحت تر تعمیم دهد. مثال 1-4, در چ09 / سابق 4 دولت, نشان می دهد که چگونه به استفاده از مقدار بازگشتی از بند دریافت, در اینجا تعداد به علاوه یک, به تصویب دولت از یک تکرار به بعد.

مثال 1-4. استفاده از مقدار بازگشتی بند دریافت به عنوان حالت برای تکرار بعدی

در این مدل همه (اگرچه در اینجا فقط یک مورد وجود دارد) از بندهای دریافتی مقداری را برمی گردانند که به تکرار بعدی تابع منتقل می شود. اگر شما استفاده از این روش, شما می توانید از مقدار بازگشتی از بند دریافت فکر می کنم به عنوان دولت به بین فراخوانی تابع حفظ شود. این حالت می تواند بسیار پیچیده تر از یک شمارنده باشد—برای مثال ممکن است یک تاپل باشد که شامل ارجاع به منابع مهم یا کار در حال انجام است .

فرایندهای سبک وزن

اگر به زبان های برنامه نویسی دیگری کار کرده اید ممکن است نگران شوید. موضوعات و روند تخم ریزی بدنام پیچیده و اغلب در زمینه های دیگر کند هستند, اما اکسیر انتظار یک برنامه کاربردی به یک گروه از فرایندهای به راحتی باعث? که به صورت بازگشتی اجرا?

بله, کاملا. اکسیر به طور خاص برای حمایت از این مدل نوشته شده است, و فرایندهای خود را سبک تر از کسانی که تقریبا هر یک از رقبای خود هستند. زمانبندی ارلانگ که اکسیر استفاده می کند فرایندها را شروع می کند و زمان پردازش را بین پردازنده ها توزیع می کند و همچنین در چندین پردازنده تقسیم می شود.

قطعا می توان فرایندهایی را نوشت که عملکرد بدی دارند و برنامه ها را طوری ساختار داد که قبل از انجام هر کاری مدت زیادی منتظر بمانند. اما لازم نیست نگران این مشکلات باشید که فقط به این دلیل اتفاق می افتد که از چندین فرایند استفاده می کنید.

ثبت یک فرایند

بسیاری از اوقات, پد همه شما نیاز به پیدا کردن و تماس با یک فرایند. با این حال, شما به احتمال زیاد برخی از فرایندهایی را ایجاد خواهید کرد که باید بیشتر پیدا شوند. اکسیر یک سیستم ثبت فرایند را فراهم می کند که بسیار ساده است: شما یک اتم و یک پید را مشخص می کنید و سپس هر فرایندی که می خواهد به این فرایند ثبت شده برسد فقط می تواند از اتم برای یافتن استفاده کند. این امر باعث می شود که مثلا یک فرایند جدید به یک سیستم اضافه شود و با فرایندهای موجود قبلی ارتباط برقرار کند.

برای ثبت نام یک فرایند, فقط با استفاده از روند.ثبت نام/2 ساخته شده در تابع. اولین استدلال پید از فرایند است, و استدلال دوم یک اتم است, به طور موثر نام شما در حال اختصاص فرایند. هنگامی که شما ثبت نام کرده اند, شما می توانید پیام با استفاده از اتم به جای یک پد ارسال:

اگر شما تلاش برای پاسخ یک فرایند است که وجود ندارد (و یا یکی که سقوط کرد), شما یک خطا استدلال بد دریافت کنید:

اگر شما تلاش برای ثبت نام یک فرایند به یک نام است که در حال حاضر در حال استفاده, شما همچنین می خواهید یک خطا از, اما اگر یک فرایند خارج شده است (یا سقوط کرد), نام به طور موثر دیگر در استفاده و شما می توانید دوباره ثبت نام.

شما همچنین می توانید روند استفاده.جایی که/1 برای بازیابی پید برای یک فرایند ثبت شده (یا صفر, اگر هیچ فرایند ثبت شده با اتم وجود دارد), و لغو ثبت نام/1 به یک فرایند خارج از لیست ثبت نام بدون کشتن. به یاد داشته باشید که شما باید یک اتم برای نام فرایند استفاده کنید:

اگر شما می خواهید برای دیدن که پروسه ثبت نام, شما می توانید روند استفاده.ثبت/0 تابع.

اگر شما در سایر زبان های برنامه نویسی کار کرده اید و انجیل "بدون متغیر جهانی" را یاد گرفته اید ممکن است تعجب کنید که چرا اکسیر لیستی از فرایندهای سیستماتیک مانند این را مجاز می داند. بسیاری از بقیه این کتاب, خب بالاخره, در مورد جداسازی تغییر و به حداقل رساندن زمینه به اشتراک گذاشته شده است

اگر شما فکر می کنم از پروسه های ثبت شده به عنوان بیشتر شبیه به خدمات از توابع, با این حال, ممکن است حس بیشتری را. یک فرایند ثبت شده است به طور موثر یک سرویس به کل سیستم منتشر شده, چیزی قابل استفاده از زمینه های متعدد. فرایندهای ثبت شده با استفاده کم نقاط ورودی قابل اعتمادی را برای برنامه های شما ایجاد می کنند—چیزی که می تواند بسیار ارزشمند باشد زیرا کد شما از نظر اندازه و پیچیدگی رشد می کند.

هنگامی که فرایندها شکستن

فرایندها شکننده هستند . اگر خطایی وجود داشته باشد عملکرد متوقف می شود و روند از بین می رود. مثال 1-5, در چ09 / سابق 5-بخش, نشان می دهد گزارش/0 تابع است که می تواند شکستن اگر ورودی می شود این است که یک عدد نیست.

مثال 1-5. یک عملکرد شکننده

اگر این کد (به عمد) دعوت کننده خطا را کامپایل و اجرا کنید متوجه خواهید شد که تا زمانی که فقط شماره ارسال کنید خوب کار می کند. ارسال هر چیز دیگری, و شما گزارش خطا در پوسته را ببینید, و هیچ پاسخ بیشتر از که پید. درگذشت:

همانطور که به مدل فرایند اکسیر عمیق تر می شوید متوجه خواهید شد که "بگذار خراب شود" یک تصمیم طراحی غیر معمول در اکسیر نیست اگرچه توانایی تحمل چنین چیزهایی و ادامه کار نیاز به کار اضافی دارد. فصل 10 همچنین نحوه یافتن و مقابله با خطاهای مختلف را به شما نشان می دهد.

فرایندهای صحبت کردن در میان خود

ارسال پیام به فرایندهای اکسیر کار ساده ای است اما گزارش پاسخ ها برای شما دشوار است اگر اطلاعاتی در مورد جایی که دوباره می توانند شما را پیدا کنند باقی نگذارید. ارسال پیام بدون درج پیام فرستنده به نوعی مانند ترک پیام تلفنی بدون درج شماره شخصی شما است: ممکن است باعث اقدام شود اما گیرنده ممکن است به شما پاسخ ندهد.

برای ایجاد ارتباطات فرایند به فرایند بدون ثبت نام بسیاری از فرایندهای, شما نیاز به شامل پیدس در پیام. عبور از پید نیاز به اضافه کردن یک استدلال به پیام دارد. به راحتی می توان با تستی که پوسته را فراخوانی می کند شروع کرد. مثال 1-6, در چ09 / سابق 6-صحبت کردن, ایجاد شده در ماژول قطره از مثال 3-2, اضافه کردن یک قطره/0 تابع است که پیام دریافت و ساخت سرعت سقوط/2 تابع خصوصی.

مثال 1-6. پروسه ای که پیامی را به فرایندی که نامیده می شود ارسال می کند

برای شروع به راحتی می توان این را از پوسته تست کرد:

مثال 1-7 که در پیدایش 09 / سابق 7 پیدا خواهید کرد فرایندی را نشان می دهد که این فرایند را فراخوانی می کند تا نشان دهد که این می تواند با مواردی فراتر از پوسته کار کند. ما با استفاده از یو.1 / بنویسید تا لیست کد از صفحه کشیده نشود اما خروجی همه در یک خط ظاهر می شود.

مثال 1-7. فراخوانی یک فرایند از یک فرایند و گزارش نتایج

عملکرد ام اف اف / 1 باعث ایجاد یک قطره می شود.قطره / 0 فرایند هنگامی که برای اولین بار راه اندازی, با استفاده از همان ماژول شما در مثال دیدم 1-6, و فروشگاه های پید در دراپ_پید . سپس تبدیل/1 را فرا می خواند که به صورت بازگشتی به پیام ها گوش می دهد.

اگر مقدار دهی اولیه از شنونده بازگشتی جدا نیست, کد خود را کار خواهد کرد, اما قطره جدید تخم ریزی.رها کردن/0 هر بار که پیام را پردازش می کند به جای استفاده مکرر از همان پیام پردازش می کند.

بند دریافت متکی بر تماس از پوسته (و یا فرایند دیگری) از جمله تنها دو استدلال, در حالی که قطره.قطره / 0 روند تماس می فرستد در نتیجه با سه. (به عنوان کد خود را پیچیده تر رشد می کند, شما به احتمال زیاد می خواهید به استفاده از پرچم صریح تر در مورد نوع اطلاعات موجود در یک پیام.) هنگامی که بند دریافت پیامی با دو استدلال دریافت می کند , پیامی را به دراپ_پید می فرستد, خود را به عنوان فرستنده شناسایی کرده و استدلال ها را منتقل می کند. هنگامی که فرایند دراپ_پید پیامی را با نتیجه برمی گرداند, بند دریافت در مورد نتیجه گزارش می دهد, سرعت را به مایل در ساعت تبدیل می کند. (بله, متریک فاصله را ترک می کند, اما سرعت را برای امریکایی ها قابل فهم تر می کند.)

استفاده از این پوسته پس از استناد به موارد زیر به نظر می رسد :

این مثال ساده ممکن است به نظر برسد که به عنوان یک نسخه پیچیده تر از فراخوانی تابع رفتار می کند اما یک تفاوت اساسی وجود دارد. در پوسته, با هیچ چیز دیگری در حال اجرا, نتیجه دوباره به سرعت—به طوری که به سرعت گزارش قبل از پوسته قرار می دهد تا پیام—اما این یک سری از تماس های ناهمزمان بود. هیچ چیز برگزار شد و به طور خاص برای یک پیام بازگشت منتظر.

پوسته یک پیام به پید1 فرستاد, شناسه فرایند برای ام اف قطره.تبدیل/1 . این فرایند یک پیام به دراپ_پید فرستاده, شناسه فرایند برای قطره.قطره/0,که قطره.ام اف _ قطره/0 تنظیم زمانی که باعث شد. این روند پیام دیگری را به ام اف قطره بازگرداند.تبدیل/1 که به خروجی استاندارد گزارش شده است (در این مورد پوسته). این پیام ها به سرعت منتقل و پردازش می شدند اما در سیستمی که هزاران یا میلیون ها پیام در حال حرکت است ممکن است این پیام ها توسط پیام های زیادی از هم جدا شده و بعدا وارد شوند.

تماشای فرایندهای شما

ارلانگ ابزاری ساده اما قدرتمند برای پیگیری فرایندهای شما و دیدن اتفاقات فراهم می کند. ابزاری که به شما امکان مشاهده و مدیریت فرایندها را می دهد یک رابط کاربری گرافیکی است که به شما امکان می دهد وضعیت فعلی فرایندهای خود را بررسی کنید و ببینید چه اتفاقی می افتد. بسته به اینکه چگونه شما نصب ارلنگ هنگام نصب اکسیر, شما ممکن است قادر به شروع از یک نوار ابزار, اما شما همیشه می توانید از پوسته شروع:

هشدار

به منظور استفاده از ناظر, شما نیاز به ویکس ویجت نصب و ارلانگ وارد شده برای حمایت از.

هنگامی که شما با کلیک بر روی زبانه پردازش خواهید دید چیزی شبیه شکل 1-1 به نظر می رسد. این یک لیست طولانی از فرایندهای است, بیش از شما احتمالا می خواستم به دانستن در مورد. اگر شما با کلیک بر روی فعلی هدر ستون تابع دو بار برای مرتب کردن لیست در جهت معکوس, شما را به فرایندهای اکسیر در بالا را ببینید, شبیه به شکل 1-2.

شکل 1-1. لیست فرایند ناظر زمانی که برای اولین بار شکل لود 1-2. لیست فرایند ناظر پس از مرتب سازی بر اساس عملکرد فعلی

ناظر لیست روند هر 10 ثانیه به روز رسانی. اگر شما ترجیح می دهند به کنترل تازه کردن خودتان, را انتخاب کنید تازه کردن فاصله از منوی نمایش, و لغو انتخاب تازه کردن دوره.

تماشای پیام ها در میان فرایندها

لیست فرایندها مفید است اما ناظر همچنین به شما امکان می دهد به داخل فعالیت فرایند نگاه کنید. این یک فرایند کمی پیچیده تر است, بنابراین یک نفس عمیق بکش!

اکسیر را پیدا کنید.قطره: ام اف _ قطره / 0 روند و کلیک راست کنید.

انتخاب کنید" ردیابی فرایندهای انتخاب شده بر اساس نام (همه گره ها) " و همانطور که در شکل 1-3 نشان داده شده است همه موارد را در سمت چپ گفتگو انتخاب کنید. سپس کلیک کنید خوب.

روی برگه نمای کلی ردیابی کلیک کنید.

کلیک کنید شروع ردیابی, و شما یک پیام هشدار دهنده همانطور که در شکل نشان داده شده است از 1-4. شما ممکن است با خیال راحت این پیام را نادیده بگیرید.

با این کار پنجره جدیدی باز می شود که ممکن است پیامی مانند "10 پیام کاهش یافته" را نمایش دهد."در حال حاضر روند انجام کاری:

پنجره ناظر برای این فرایند به روز رسانی خواهد شد برای نشان دادن پیام ها و تماس, همانطور که در شکل نشان داده شده است 1-5.

inel 09 trace log

شکل 1-5. ردیابی تماسها هنگام ارسال پیام

ناظر به طور کلی ساده ترین مکان برای چرخش است وقتی که در فهمیدن اینکه در میان فرایندهای شما چه اتفاقی می افتد مشکل دارید.

شکستن چیزها و پیوند دادن فرایندها

هنگامی که شما یک پیام ارسال, شما همیشه می خواهید به عقب بر گردیم پیام به عنوان مقدار بازگشتی. این بدان معنا نیست که همه چیز خوب پیش رفته و پیام به درستی دریافت و پردازش شده است. اگر شما ارسال یک پیام است که مطابقت ندارد یک الگوی در فرایند دریافت هیچ اتفاقی نخواهد افتاد (در حال حاضر حداقل) با پیام فرود در صندوق پستی اما نه تحریک فعالیت. ارسال یک پیام است که می شود از طریق تطبیق الگوی اما ایجاد خطا روند جایی که خطا رخ داده احتمالا حتی چند پیام و پردازش پایین خط متوقف خواهد شد.

پیام هایی که با الگویی در بند دریافت مطابقت ندارند ناپدید نمی شوند. ممکن است که به روز رسانی یک فرایند با یک نسخه جدید از کد است که این پیام ها را بازیابی.

چون فرایندها شکننده هستند, شما اغلب می خواهید کد خود را به زمانی که فرایند دیگری شکست خورده است. در این حالت اگر ورودی های بد متوقف شوند.قطره / 0, این کار حس بسیار به ترک ام اف قطره را.تبدیل / 1 روند معلق در اطراف. شما می توانید ببینید که چگونه این کار را از طریق پوسته و ناظر. ابتدا ناظر را راه اندازی کنید به پنجره روند بروید و سپس از خط فرمان تخم ریزی کنید.ام اف _ قطره / 0 :

شما چیزی شبیه شکل 1-6 در ناظر خواهید دید. سپس, تغذیه روند خود را برخی از داده های بد, یک اتم ( :زویدها ) به جای یک عدد برای فاصله, و ناظر بیشتر شبیه شکل نگاه 1-7:

شکل 1-6. مجموعه ای سالم از فرایندهای شکل 1-7. فقط قطره: روند قطره / 0 از بین رفته است

از مگراف باقی مانده.تبدیل / 1 روند در حال حاضر بی فایده است, بهتر است برای متوقف کردن زمانی که قطره.قطره / 0 شکست می خورد. اکسیر شما اجازه می دهد که وابستگی مشخص با یک لینک. ساده ترین راه برای انجام این کار در حالی که اجتناب از شرایط مسابقه بالقوه است که استفاده از تخم ریزی / 3 به جای فقط تخم ریزی/3 . هر چیز دیگری در ماژول باقی می ماند. این در مثال 1-8 نشان داده شده است که می توانید در پیدا کنید چ09/سابق 8-پیوند دادن .

مثال 1-8. فراخوانی یک فرایند مرتبط از یک فرایند تا شکست تبلیغ

اکنون, اگر شما کامپایل مجدد و تست این با ناظر, شما خواهید دید که هر دو فرایند ناپدید زمانی که قطره:قطره / 0 نتواند, همانطور که در شکل نشان داده شده است 1-8:

inel 09 linked processes

شکل 1-8. هر دو فرایند در حال حاضر ترک زمانی که یک خطا وجود دارد

پیوندها دو طرفه هستند. اگر شما کشتن ام اف قطره.ام اف _ قطره / 0 روند-به عنوان مثال با روند.خروج(پید1,: کشتن). - قطره.قطره / 0 روند نیز ناپدید خواهد شد. (: کشتن سخت ترین دلیل برای خروج است و قابل حمل نیست زیرا گاهی اوقات شما واقعا باید یک روند را متوقف کنید.)

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

مثال 1-9 , در چ09/سابق 9-به دام انداختن, نشان می دهد که چگونه اولیه قطره اف اف/0 روش تغییر شامل این تماس به مجموعه ای از پرچم روند, و می افزاید: یکی دیگر از ورود به بند دریافت که برای خروجی گوش دادن و گزارش منظمی تر.

مثال 1-9. به دام انداختن یک شکست, گزارش یک خطا, و خروج

اگر این اجرا و تغذیه داده بد روش تبدیل/1 پیام خطا (عمدتا تکثیر پوسته) قبل از خروج منظمی گزارش خواهد شد:

یک جایگزین قوی تر یک متغیر جدید دراپ_پید را ایجاد می کند و روند جدیدی را ایجاد می کند. که نسخه, نشان داده شده در مثال 1-10, که شما می توانید در چ09/اکس10-انعطاف پذیر پیدا , بسیار سخت تر. بند دریافت خود نوردد دور شکست, سربازی در با یک نسخه جدید (جدید) از ماشین حساب قطره در صورت نیاز.

مثال 1-10. به دام انداختن یک شکست, گزارش یک خطا, و راه اندازی یک فرایند جدید

اگر شما کامپایل و اجرای مثال 1-10, شما شکل خواهید دید 1-9 هنگامی که شما برای اولین بار شروع ناظر . اگر به دادههای بد غذا بدهید, همانطور که در خط 6 در نمونه کد زیر نشان داده شده است, همچنان پیغام خطا را از پوسته دریافت خواهید کرد, اما روند کار به خوبی انجام خواهد شد. همانطور که شما در ناظر را ببینید, همانطور که در شکل نشان داده شده است 1-10, شروع یک فرایند جدید برای رسیدگی به قطره.محاسبات قطره / 0 و همانطور که خط 7 نشان می دهد مانند مدل قبلی خود کار می کند:

شکل 1-9. پردازش قبل از یک خطا—توجه داشته باشید پید در شکل خط بالا 1-10. پردازش پس از یک خطا-توجه داشته باشید که خط بالا تغییر پید

اکسیر گزینه های مدیریت فرایند بیشتری را در اختیار شما قرار می دهد. شما می توانید یک لینک با روند حذف.لغو ارتباط/1, و یا ایجاد یک اتصال فقط برای تماشای یک فرایند با روند.مانیتور/1 . اگر شما می خواهید برای خاتمه یک فرایند, روند استفاده.خروج/2 برای مشخص کردن یک فرایند و دلیل. شما نمیتوانید پید فرایند دیگر و یا خود را مشخص ().

برنامه های کاربردی ساختمان است که می تواند شکست را تحمل و بازگرداندن قابلیت های خود را در هسته برنامه نویسی اکسیر قوی. توسعه به این سبک احتمالا برای اکثر برنامه نویسان جهشی بزرگتر از تغییر اکسیر به سمت برنامه نویسی تابعی است اما اینجاست که قدرت واقعی اکسیر مشخص می شود.

ثبت دیدگاه

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