مجدول مهام Rust

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مجدول مهام 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)، تطبيقات العميل-الخادم، معالجة تدفقات البيانات، تنفيذ روبوتات الدردشة، أنظمة المراقبة، وأي سيناريوهات تتطلب التزامن دون حظر. إذا كان تطبيقك يتعامل مع الإدخال/الإخراج (الشبكة، الملفات) أو يتطلب معالجة العديد من الطلبات، فإن مجدول المهام هو الخيار الصحيح.

توصيات