في لغة Rust، يعتمد البرمجة غير المتزامنة على مفهوم "العمليات المستقبلية" (futures) لتمثيل العمليات التي قد تستغرق وقتًا طويلاً والتي قد لا تكتمل على الفور. تحتاج هذه العمليات المستقبلية إلى آلية لتنفيذها وإكمالها. هنا يأتي دور المنفّذات غير المتزامنة.
المنفّذ غير المتزامن مسؤول عن إدارة هذه العمليات المستقبلية وتشغيلها. ويوفّر بيئة يمكن فيها جدولة العمليات المستقبلية، والتحقّق من تقدّمها، وإكمالها في النهاية. يمكنك اعتباره منسّقًا يعالج تعقيدات المهام غير المتزامنة، ما يسمح للرمز البرمجي بالبقاء سريع الاستجابة وفعّالاً.
توفّر لغة Rust منفّذات غير متزامنة مختلفة، لكل منها نقاط قوة وخصائص فريدة.
المنفّذات غير المتزامنة
يعتمد اختيار المنفّذ لخدمة Rust بشكل كبير على طبيعة عبء العمل. على الرغم من أنّ Tokio هي بيئة تشغيل غير متزامنة فعّالة، قد لا تكون الحل الأمثل لجميع السيناريوهات.
بالنسبة إلى الخدمات التي تنفّذ بشكل أساسي عمليات متسلسلة، قد يؤدي استخدام بيئة تشغيل غير متزامنة مثل Tokio إلى زيادة غير ضرورية في النفقات العامة بدون تحقيق تحسينات كبيرة في الأداء. في مثل هذه الحالات، قد يكون المنفّذ أحادي السلسلة خيارًا أكثر ملاءمة وخفيفًا. يُبسّط هذا النهج قاعدة الرموز البرمجية ويقلّل من استهلاك الموارد.
ضبط سلاسل الوحدات العاملة
عند التعامل مع الخدمات التي تتضمّن عمليات متزامنة أو غير متزامنة بطبيعتها، يصبح الاستفادة من إمكانات بيئة تشغيل غير متزامنة مثل Tokio أمرًا بالغ الأهمية. لتحقيق أقصى قدر من الأداء في هذه السيناريوهات، اضبط بيئة التشغيل لاستخدام عدد من سلاسل الوحدات العاملة يتطابق مع عدد أنوية وحدة المعالجة المركزية المتاحة على النظام. يسمح ذلك لبيئة التشغيل بتوزيع عبء العمل بكفاءة والاستفادة الكاملة من قوة المعالجة المتاحة.
ضَع بيئة النظام العامة في الاعتبار عند ضبط سلاسل الوحدات العاملة. إذا كانت خدمات متعدّدة تعمل بنشاط على الجهاز الافتراضي نفسه، اضبط عدد سلاسل الوحدات العاملة لكل خدمة لمنع الإفراط في استخدام وحدة المعالجة المركزية وضمان التوزيع العادل للموارد بين جميع العمليات النشطة.
العمليات التي تحظر التنفيذ
من المهم التأكّد من عدم حظر سلاسل الوحدات العاملة داخل بيئة تشغيل غير متزامنة بسبب عمليات تستغرق وقتًا طويلاً أو عمليات متزامنة. يمكن أن يؤدي حظر سلسلة وحدة عاملة إلى إعاقة قدرة بيئة التشغيل بشدة على معالجة المهام الواردة والحفاظ على سرعة الاستجابة.
إذا كانت دالة يتم تنفيذها على سلسلة الوحدات العاملة (worker thread) بحاجة إلى إجراء عملية تحظر التنفيذ، استخدِم tokio::spawn_blocking. تنقل هذه الدالة العملية التي تحظر التنفيذ إلى مجموعة منفصلة من سلاسل الوحدات العاملة مصمّمة خصيصًا لهذه المهام، ما يمنع أي انقطاع لسلاسل الوحدات العاملة غير المتزامنة ويضمن سرعة استجابة الخدمة بشكل عام.