Hacker News

درک Go Runtime: The Scheduler

نظرات

2 min read Via internals-for-interns.com

Mewayz Team

Editorial Team

Hacker News

مقدمه: رسانای نامرئی برنامه های Your Go

وقتی یک برنامه Go می نویسید، روی منطق، عملکردها و کانال ها تمرکز می کنید. شما «go myFunction()» را تایپ می‌کنید و کد شما یکپارچه اجرا می‌شود. اما در زیر سطح، یک رهبر نامرئی اجرا را هماهنگ می کند و اطمینان می دهد که روال های همزمان شما روان و کارآمد هستند. این استاد برنامه زمان‌بندی زمان اجرا Go است. درک چگونگی کارکرد آن فقط یک تمرین آکادمیک نیست. برای نوشتن نرم افزار با کارایی بالا و مقیاس پذیر بسیار مهم است. برای پلتفرم هایی مانند Mewayz که برای مدیریت همزمان فرآیندهای تجاری پیچیده و مدولار ساخته شده اند، استفاده از نقاط قوت زمانبندی برای ارائه یک سیستم عامل پاسخگو و قابل اعتماد برای مشاغل اساسی است.

Go Scheduler چیست و چرا به آن نیاز داریم؟

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

مدل GMP: معماری هسته زمانبند

زمان‌بندی Go بر روی مدلی عمل می‌کند که اغلب به آن GMP می‌گویند، که مخفف Goroutines، OS Threads (Machines) و پردازنده‌ها است. این سه نفر به طور هماهنگ برای اجرای کد شما کار می کند.

  • G (Goroutine): این واحد اصلی اجرای همزمان است. این شامل پشته، اشاره گر دستورالعمل و سایر اطلاعات مورد نیاز برای اجرای یک تابع است.
  • M (ماشین): M نشان دهنده یک رشته سیستم عامل است. این موجودیت واقعی است که توسط سیستم عامل برنامه ریزی می شود تا بر روی یک هسته CPU اجرا شود.
  • P (پردازنده): A P یک پردازشگر منطقی یا زمینه ای برای زمان بندی است. این نشان دهنده منابع مورد نیاز برای اجرای کد Go است. هر P یک صف اجرای محلی از گوروتین ها (Gs) آماده اجرا دارد. تعداد P ها معمولاً روی تعداد هسته های CPU موجود (GOMAXPROCS) تنظیم می شود.

این رابطه کلیدی است: برای اجرای کد Go باید یک P به M متصل شود و M سپس از صف محلی P، گوروتین ها را اجرا می کند. این انتزاع به زمان‌بند اجازه می‌دهد تا توزیع کار را در هسته‌های موجود CPU به طور مؤثر مدیریت کند.

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

هوش زمان‌بند در نحوه مدیریت صف‌ها و روابط M-P نهفته است. این یک زمان‌بندی پیشگیرانه است، به این معنی که می‌تواند برنامه‌های در حال اجرا را قطع کند تا به دیگران فرصتی برای اجرا بدهد. این امر مانع می شود که یک گوروتین منفرد به طور نامحدود یک P را بچسباند. مکانیسم های کلیدی عبارتند از:

Work-Stealing: هنگامی که یک P در صف محلی خود فاقد گوروتین است، بیکار نمی نشیند. در عوض، تلاش می‌کند تا نیمی از گوروتین‌ها را از صف اجرای P دیگری «دزدیده» کند. اگر این کار انجام نشد، صف اجرای جهانی را بررسی می کند. این تضمین می‌کند که تا زمانی که در هر نقطه‌ای از سیستم کار برای انجام دادن وجود دارد، همه CPUها مشغول نگه داشته می‌شوند.

تماس‌های سیستمی: وقتی یک گوروتین یک تماس سیستمی مسدودکننده برقرار می‌کند (مثلاً خواندن یک فایل)، زمان‌بندی‌کننده یک انتقال را انجام می‌دهد. رشته (M) که فراخوانی را اجرا می کند مسدود می شود، اما P که به آن متصل شده است، رشته ای باقی نمی ماند. زمان‌بند P را جدا می‌کند و یک M غیرفعال پیدا می‌کند یا یک مورد جدید برای اتصال به P ایجاد می‌کند، بنابراین می‌تواند به اجرای دیگر گوروتین‌ها ادامه دهد. وقتی فراخوانی سیستم کامل شد، گوروتین دوباره در یک صف اجرا قرار می‌گیرد و M سعی می‌کند یک P را برای ادامه اجرا پیدا کند.

💡 DID YOU KNOW?

Mewayz replaces 8+ business tools in one platform

CRM · Invoicing · HR · Projects · Booking · eCommerce · POS · Analytics. Free forever plan available.

Start Free →
الگوریتم زمان‌بندی کار Go یک شاهکار مهندسی است که مجموعه‌ای از پردازنده‌های منفرد را به یک تیم همکاری تبدیل می‌کند که به طور موثر کل حجم کار را متعادل می‌کند.

مفاهیم برای ساخت سیستم های مقیاس پذیر مانند Mewayz

برای سیستم‌عامل کسب‌وکار مدولار مانند Mewayz، که در آن ماژول‌های مختلف - از CRM گرفته تا مدیریت موجودی - باید مستقل و در عین حال منسجم عمل کنند، طراحی زمان‌بندی Go یک مزیت مهم است. با ساختاردهی منطق برنامه به چندین گوروتین کوچک و همزمان، Mewayz می تواند به توان عملیاتی بالایی دست یابد. زمان‌بند به‌طور خودکار این وظایف را در تمام هسته‌های CPU موجود توزیع می‌کند و تضمین می‌کند که سیستم حتی در زیر بار سنگین پاسخگو باقی می‌ماند. توسعه‌دهندگانی که بر روی Mewayz ساخته می‌شوند می‌توانند روی نوشتن کدهای شفاف و ماژولار بدون ریزمدیریت رشته‌ها تمرکز کنند و مطمئن باشند که زمان اجرا زیربنایی وظیفه پیچیده اجرای موازی را به طور موثر انجام می‌دهد. این به Mewayz اجازه می‌دهد تا عملکرد و مقیاس‌پذیری مورد نیاز کسب‌وکارهای مدرن را از سیستم‌عامل اصلی خود ارائه دهد.

سوالات متداول

مقدمه: رسانای نامرئی برنامه های Your Go

وقتی یک برنامه Go می نویسید، روی منطق، عملکردها و کانال ها تمرکز می کنید. شما «go myFunction()» را تایپ می‌کنید و کد شما یکپارچه اجرا می‌شود. اما در زیر سطح، یک رهبر نامرئی اجرا را هماهنگ می کند و اطمینان می دهد که روال های همزمان شما روان و کارآمد هستند. این استاد برنامه زمان‌بندی زمان اجرا Go است. درک چگونگی کارکرد آن فقط یک تمرین آکادمیک نیست. برای نوشتن نرم افزار با کارایی بالا و مقیاس پذیر بسیار مهم است. برای پلتفرم هایی مانند Mewayz که برای مدیریت همزمان فرآیندهای تجاری پیچیده و مدولار ساخته شده اند، استفاده از نقاط قوت زمانبندی برای ارائه یک سیستم عامل پاسخگو و قابل اعتماد برای مشاغل اساسی است.

Go Scheduler چیست و چرا به آن نیاز داریم؟

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

مدل GMP: معماری هسته زمانبند

زمان‌بندی Go بر روی مدلی عمل می‌کند که اغلب به آن GMP می‌گویند، که مخفف Goroutines، OS Threads (Machines) و پردازنده‌ها است. این سه نفر به طور هماهنگ برای اجرای کد شما کار می کند.

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

هوش زمان‌بند در نحوه مدیریت صف‌ها و روابط M-P نهفته است. این یک زمان‌بندی پیشگیرانه است، به این معنی که می‌تواند برنامه‌های در حال اجرا را قطع کند تا به دیگران فرصتی برای اجرا بدهد. این امر مانع می شود که یک گوروتین منفرد به طور نامحدود یک P را بچسباند. مکانیسم های کلیدی عبارتند از:

مفاهیم برای ساخت سیستم های مقیاس پذیر مانند Mewayz

برای سیستم‌عامل کسب‌وکار مدولار مانند Mewayz، که در آن ماژول‌های مختلف - از CRM گرفته تا مدیریت موجودی - باید مستقل و در عین حال منسجم عمل کنند، طراحی زمان‌بندی Go یک مزیت مهم است. با ساختاردهی منطق برنامه به چندین گوروتین کوچک و همزمان، Mewayz می تواند به توان عملیاتی بالایی دست یابد. زمان‌بند به‌طور خودکار این وظایف را در تمام هسته‌های CPU موجود توزیع می‌کند و تضمین می‌کند که سیستم حتی در زیر بار سنگین پاسخگو باقی می‌ماند. توسعه‌دهندگانی که بر روی Mewayz ساخته می‌شوند می‌توانند روی نوشتن کدهای شفاف و ماژولار بدون ریزمدیریت رشته‌ها تمرکز کنند و مطمئن باشند که زمان اجرا زیربنایی وظیفه پیچیده اجرای موازی را به طور موثر انجام می‌دهد. این به Mewayz اجازه می‌دهد تا عملکرد و مقیاس‌پذیری مورد نیاز کسب‌وکارهای مدرن را از سیستم‌عامل اصلی خود ارائه دهد.

همه ابزارهای کسب و کار شما در یک مکان

جلوگیری از چندین برنامه را متوقف کنید. Mewayz 208 ابزار را فقط با 49 دلار در ماه ترکیب می کند - از موجودی تا HR، رزرو تا تجزیه و تحلیل. برای شروع نیازی به کارت اعتباری نیست.

Meway را امتحان کنید