فرآیند اکسیر – بیشتر توضیح دهید

Summarize this content to 400 words in Persian Lang
مقدمه
فرآیند اکسیر عجیب است و درک کامل آن سخت است.
هر خط کد در یک فرآیند اجرا می شود، بنابراین درک کنید که به ما کمک می کند تا با Elixir خوب کار کنیم.
Process راهی برای پشتیبانی از اکسیر (با پشتیبانی Erlang VM) از تحمل همزمان و خطا است.
فرآیند یک جزیره منزوی است
کد در یک فرآیند نمی تواند به داده های خارج مانند متغیر جهانی (الکسیر ندارد) یا داده های موجود در فرآیندهای دیگر دسترسی داشته باشد.
فرآیندهای دیگر می توانند از طریق پیام (ارسال/دریافت انجام) با یک فرآیند برای انتقال داده ارتباط برقرار کنند. شبیه مدل react به نظر می رسد. هر فرآیند دارای یک پید به فرآیند دیگری است که می تواند پیام ارسال کند و یک صندوق پستی برای ذخیره پیام receive do می تواند پیام را پردازش کند
فرآیند دارای یک pid برای شناسایی در محلی (یک گره) و گره راه دور (خوشه ای). می تواند یک نام (اتم) داشته باشد و ما می توانیم نام را بر اساس ثبت کنیم Process.register/2 تابع. به یاد داشته باشید که می توانیم از نام فرآیند استفاده کنیم send به جای آن پیام دهید pid.
به یاد داشته باشید که اگر پیامی را به فرآیندی ارسال کنیم که دیگر وجود ندارد، پیام pid توسط سیستم نادیده گرفته میشود و سیستم با نام فرآیند یک خطا برمیگرداند.
توجه داشته باشید:
همه پیامها به فرآیندی میروند که در صندوق پستی قرار میگیرد و اگر فرآیند نتواند به اندازه کافی سریع مصرف شود، میتواند خطای OOM ایجاد کند.
پیام با داده های بزرگ به کندی ساخته می شود و حافظه سریع رشد می کند.
روشی برای ایجاد یک فرآیند
ما دو راه برای تخم ریزی فرآیند داریم. یکی استفاده از توابع تخم ریزی (شامل Task). یکی استفاده از سرپرست با اعلام آن در سوپروایزر (یا اضافه کردن فرزند به صورت پویا) و سرپرست فرآیند را شروع می کند.
جریان تخم ریزی:(فرآیند 1 تخم ریزی فرآیند 2)
جریان ناظر:(سرپرست فرآیندهای فرزند را ایجاد می کند – فرزند 1 و فرزند 2)
فرآیند چگونه اجرا می شود
ما اطلاعات اولیه ای در مورد فرآیند Elixir داریم، اما هنوز نمی دانیم که چگونه در سیستم اجرا می شود (Erlang VM – ErlVM).
کد اکسیر ما به کد BEAM کامپایل می شود و سپس ErlVM آن را اجرا می کند. همانطور که می دانیم هر خط کد در یک فرآیند اجرا می شود، ما یک زمانبندی برای مدیریت زمانبندی داریم. هر زمانبندی دارای یک صف اجرا برای فرآیندهای نگهداری است. تعداد زمانبندیها بهطور پیشفرض برابر با تعداد هستههای cpu در سیستم هستند و میتوانند در زمان شروع پیکربندی شوند. ErlVM مکانیزمی را برای متعادل کردن مجدد تعداد فرآیندها بین صف اجرا فراهم می کند. در پست دیگری به جزئیات این موضوع خواهیم پرداخت.
نمودار اصلی زمانبندی ها:
چیز دیگری که اکنون به آن نیاز داریم GC (جمع کننده زباله) ErlVM است. هر فرآیند دارای حافظه پشته و & GC برای پاکسازی حافظه در پشته خود است. ErlVM همچنین دارای یک پشته جهانی و GC جهانی است. این نکته با زبان های دیگر مانند جاوا، گلانگ (با استفاده از GC جهانی) متفاوت است. GC فرآیند بر اساس تعداد کاهش (تنظیم با پیکربندی) راه اندازی می شود و بر سایر فرآیندها تأثیر نمی گذارد. این باعث میشود ErlVM از نرمافزار بلادرنگ پشتیبانی کند!
ویژگی پیشرفته فرآیند
اکسیر (بر اساس Erlang/OTP) یک سیستم منحصر به فرد است و دارای ویژگی های قدرتمندی است که زبان های دیگر ندارند. به عنوان مثال: پیوند بین فرآیند، فرآیند نظارت. من کمی در پست دیگر توضیح داده ام و بعداً با موارد استفاده بیشتر برای آن باز خواهیم گشت.
(در آینده جزئیات بیشتری را به روز خواهم کرد)
مقدمه
فرآیند اکسیر عجیب است و درک کامل آن سخت است.
هر خط کد در یک فرآیند اجرا می شود، بنابراین درک کنید که به ما کمک می کند تا با Elixir خوب کار کنیم.
Process راهی برای پشتیبانی از اکسیر (با پشتیبانی Erlang VM) از تحمل همزمان و خطا است.
فرآیند یک جزیره منزوی است
کد در یک فرآیند نمی تواند به داده های خارج مانند متغیر جهانی (الکسیر ندارد) یا داده های موجود در فرآیندهای دیگر دسترسی داشته باشد.
فرآیندهای دیگر می توانند از طریق پیام (ارسال/دریافت انجام) با یک فرآیند برای انتقال داده ارتباط برقرار کنند. شبیه مدل react به نظر می رسد. هر فرآیند دارای یک پید به فرآیند دیگری است که می تواند پیام ارسال کند و یک صندوق پستی برای ذخیره پیام receive do
می تواند پیام را پردازش کند
فرآیند دارای یک pid
برای شناسایی در محلی (یک گره) و گره راه دور (خوشه ای). می تواند یک نام (اتم) داشته باشد و ما می توانیم نام را بر اساس ثبت کنیم Process.register/2
تابع. به یاد داشته باشید که می توانیم از نام فرآیند استفاده کنیم send
به جای آن پیام دهید pid
.
به یاد داشته باشید که اگر پیامی را به فرآیندی ارسال کنیم که دیگر وجود ندارد، پیام pid توسط سیستم نادیده گرفته میشود و سیستم با نام فرآیند یک خطا برمیگرداند.
توجه داشته باشید:
- همه پیامها به فرآیندی میروند که در صندوق پستی قرار میگیرد و اگر فرآیند نتواند به اندازه کافی سریع مصرف شود، میتواند خطای OOM ایجاد کند.
- پیام با داده های بزرگ به کندی ساخته می شود و حافظه سریع رشد می کند.
روشی برای ایجاد یک فرآیند
ما دو راه برای تخم ریزی فرآیند داریم. یکی استفاده از توابع تخم ریزی (شامل Task
). یکی استفاده از سرپرست با اعلام آن در سوپروایزر (یا اضافه کردن فرزند به صورت پویا) و سرپرست فرآیند را شروع می کند.
جریان تخم ریزی:
(فرآیند 1 تخم ریزی فرآیند 2)
جریان ناظر:
(سرپرست فرآیندهای فرزند را ایجاد می کند – فرزند 1 و فرزند 2)
فرآیند چگونه اجرا می شود
ما اطلاعات اولیه ای در مورد فرآیند Elixir داریم، اما هنوز نمی دانیم که چگونه در سیستم اجرا می شود (Erlang VM – ErlVM).
کد اکسیر ما به کد BEAM کامپایل می شود و سپس ErlVM آن را اجرا می کند. همانطور که می دانیم هر خط کد در یک فرآیند اجرا می شود، ما یک زمانبندی برای مدیریت زمانبندی داریم. هر زمانبندی دارای یک صف اجرا برای فرآیندهای نگهداری است. تعداد زمانبندیها بهطور پیشفرض برابر با تعداد هستههای cpu در سیستم هستند و میتوانند در زمان شروع پیکربندی شوند. ErlVM مکانیزمی را برای متعادل کردن مجدد تعداد فرآیندها بین صف اجرا فراهم می کند. در پست دیگری به جزئیات این موضوع خواهیم پرداخت.
نمودار اصلی زمانبندی ها:
چیز دیگری که اکنون به آن نیاز داریم GC (جمع کننده زباله) ErlVM است. هر فرآیند دارای حافظه پشته و & GC برای پاکسازی حافظه در پشته خود است. ErlVM همچنین دارای یک پشته جهانی و GC جهانی است. این نکته با زبان های دیگر مانند جاوا، گلانگ (با استفاده از GC جهانی) متفاوت است. GC فرآیند بر اساس تعداد کاهش (تنظیم با پیکربندی) راه اندازی می شود و بر سایر فرآیندها تأثیر نمی گذارد. این باعث میشود ErlVM از نرمافزار بلادرنگ پشتیبانی کند!
ویژگی پیشرفته فرآیند
اکسیر (بر اساس Erlang/OTP) یک سیستم منحصر به فرد است و دارای ویژگی های قدرتمندی است که زبان های دیگر ندارند. به عنوان مثال: پیوند بین فرآیند، فرآیند نظارت. من کمی در پست دیگر توضیح داده ام و بعداً با موارد استفاده بیشتر برای آن باز خواهیم گشت.
(در آینده جزئیات بیشتری را به روز خواهم کرد)