مجدول مهام Rust: إدارة فعالة للمهام غير المتزامنة
مجدول مهام Rust هو أداة قوية لتنظيم التنفيذ المتوازي وغير المتزامن للكود. في نظام Rust البيئي، توجد عدة حلول شائعة: tokio، async-std، smol و futures. تتيح هذه المكتبات إنشاء وجدولة وإدارة المهام التي يتم تنفيذها بشكل متزامن، دون حظر الخيط الرئيسي. وهي مفيدة بشكل خاص للتطبيقات عالية التحميل: خوادم الويب، خدمات الشبكة، معالجات الأحداث، وأنظمة الوقت الفعلي.
لماذا نحتاج إلى مجدول المهام؟
في التطبيقات الحديثة، غالبًا ما يكون من الضروري تنفيذ عدة عمليات في وقت واحد: معالجة الطلبات، قراءة الملفات، إرسال البيانات عبر الشبكة. يحل مجدول مهام Rust هذه المشكلة من خلال توفير خيوط خفيفة الوزن (futures/tasks) يتم جدولتها على مجموعة من الخيوط. يتيح ذلك استخدام موارد وحدة المعالجة المركزية بكفاءة، وتجنب التكاليف الإضافية لإنشاء خيوط النظام. المزايا الرئيسية: قابلية التوسع، استهلاك منخفض للذاكرة، وأداء قابل للتنبؤ.
التثبيت
للعمل مع مجدول المهام، أضف إحدى المكتبات الشائعة إلى Cargo.toml:
[dependencies]tokio = { version = "1", features = ["full"] }أو استخدم async-std:
[dependencies]async-std = "1.12"بعد ذلك، يمكنك استخدام الماكرو #[tokio::main] أو #[async_std::main] للدخول إلى السياق غير المتزامن.
الوظائف الأساسية
- إنشاء المهام:
tokio::spawnأوasync_std::task::spawnيقوم بتشغيل future في الخلفية. - انتظار المهام:
join!أوselect!يسمحان بانتظار اكتمال عدة مهام. - القنوات:
tokio::sync::mpscلنقل البيانات بين المهام. - المؤقتات:
tokio::time::sleepللتأخيرات والمهام الدورية. - مجموعة الخيوط: توزيع تلقائي للمهام على خيوط العمل.
مثال على كود Rust
use tokio::time::{sleep, Duration};
#[tokio::main]async fn main() { let handle1 = tokio::spawn(async { sleep(Duration::from_secs(1)).await; println!("المهمة 1 مكتملة"); });
let handle2 = tokio::spawn(async { sleep(Duration::from_secs(2)).await; println!("المهمة 2 مكتملة"); });
tokio::join!(handle1, handle2); println!("جميع المهام منفذة");}يقوم هذا الكود بإنشاء مهمتين متوازيتين، تنتظر كل منهما وقتًا محددًا، ثم تطبع رسالة. tokio::join! ينتظر اكتمال كلتيهما.
متى تستخدم
مجدول مهام Rust مثالي لـ: تطوير خوادم الويب (على سبيل المثال، مع إطار العمل axum)، تطبيقات العميل-الخادم، معالجة تدفقات البيانات، تنفيذ روبوتات الدردشة، أنظمة المراقبة، وأي سيناريوهات تتطلب التزامن دون حظر. إذا كان تطبيقك يتعامل مع الإدخال/الإخراج (الشبكة، الملفات) أو يتطلب معالجة العديد من الطلبات، فإن مجدول المهام هو الخيار الصحيح.