Fibers
التزامن التعاوني
Fibers درس مجاني في Ruby Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Ruby Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Ruby Academy 4 دروس في المجموع.
ما هو Fiber؟
إن Fiber وحدة تنفيذ خفيفة الوزن تتحكم فيها يدويًا. وعلى خلاف الخيوط، لا يعمل Fiber من تلقاء نفسه مطلقًا؛ بل تسلّمه التحكم صراحةً، ثم يعيد هو التحكم إليك.
- يُسمى هذا التزامن التعاوني.
- من السهل إنشاء Fibers وإيقافها مؤقتًا، كما أنها قليلة التكلفة.
- تشكل أساس المولدات والإدخال والإخراج غير المتزامن في Ruby.
الإنشاء والاستئناف
أنشئ Fiber باستخدام Fiber.new وابدأه أو واصل تشغيله باستخدام resume. وتستمر الكتلة في العمل حتى تنتهي أو تتوقف مؤقتًا.
fiber = Fiber.new do
puts "Inside the fiber"
end
fiber.resume
puts "Back in main"الإيقاف المؤقت باستخدام yield
يوقف Fiber.yield الـ Fiber مؤقتًا ويعيد التحكم إلى من استدعى resume. ويواصل الاستدعاء التالي لـ resume التنفيذ مباشرةً بعد yield.
fiber = Fiber.new do
puts "Step 1"
Fiber.yield
puts "Step 2"
end
fiber.resume
puts "Main between steps"
fiber.resumeتمرير القيم إلى الخارج
تصبح الوسيطة الممررة إلى Fiber.yield قيمة الإرجاع من resume. ويتيح ذلك لـ Fiber إنتاج سلسلة من القيم عند الطلب.
fiber = Fiber.new do
Fiber.yield 10
Fiber.yield 20
30
end
puts fiber.resume
puts fiber.resume
puts fiber.resumeتمرير القيم إلى الداخل
تصبح الوسيطة الممررة إلى resume قيمة الإرجاع من Fiber.yield داخل Fiber. وهكذا يتدفق الاتصال في الاتجاهين.
fiber = Fiber.new do
got = Fiber.yield "ready"
puts "Fiber received: " + got
end
puts fiber.resume
fiber.resume("hello")عداد لا نهائي
بما أن Fiber يتوقف مؤقتًا ويُستأنف، يمكنه تمثيل سلسلة كسولة لا نهائية من دون حساب جميع عناصرها مسبقًا.
counter = Fiber.new do
n = 1
loop do
Fiber.yield n
n += 1
end
end
3.times { puts counter.resume }التحقق من استمرار العمل
يخبرك Fiber#alive? بما إذا كان من الممكن استئناف Fiber. ويؤدي استئناف Fiber متوقف إلى رفع FiberError.
fiber = Fiber.new { puts "done" }
puts "Alive before: " + fiber.alive?.to_s
fiber.resume
puts "Alive after: " + fiber.alive?.to_sFibers مقابل الخيوط
الاختلافات الرئيسية:
- يتولى وقت التشغيل جدولة الخيوط، بينما تتولى أنت جدولة Fibers.
- يمكن إيقاف الخيوط انتزاعيًا في أي وقت، بينما لا تنتقل Fibers إلا عند
yieldأوresume. - تتجنب Fibers حالات التسابق لأن Fiber واحدًا فقط يعمل، ولأن نقاط التبديل محددة صراحةً.
تستخدم Enumerators الـ Fibers
تُبنى Enumerators الكسولة في Ruby على Fibers. إذ يوقف المكرر الخارجي عمله بين القيم، تمامًا كما يعيد Fiber التحكم عند yield.
enum = Enumerator.new do |y|
y << 1
y << 2
y << 3
end
puts enum.next
puts enum.nextFibers والإدخال والإخراج غير المتزامن
تتضمن Ruby الحديثة نقطة ربط لـ مجدول Fibers. وتستخدمها مكتبات مثل gem async بحيث يستأنف المجدول Fiber آخر تلقائيًا عندما ينتظر أحد Fibers إدخالًا أو إخراجًا.
يوفر ذلك إدخالًا وإخراجًا عالي التزامن باستخدام تعليمات برمجية تبدو كأنها تعليمات تسلسلية عادية.
متى تستخدم Fibers؟
استخدم Fibers عندما تحتاج إلى:
- مولدات كسولة تنتج القيم عند الطلب.
- تدفق تحكم بأسلوب coroutines.
- تبديل دقيق وحتمي من دون أقفال.
في معظم حالات التزامن اليومية، تكون الخيوط أو gem async (التي تستخدم Fibers داخليًا) أسهل.
تحقق سريع
اختبر فهمك لـ Fibers.
مراجعة: Fibers
تعلّمت التزامن التعاوني باستخدام Fibers:
- يؤدي الجمع بين
Fiber.newوresumeإلى تشغيل Fiber ومواصلة عمله. - يوقف
Fiber.yieldالتنفيذ مؤقتًا ويعيد التحكم. - تتدفق القيم في الاتجاهين عبر وسائط yield وresume.
- تدعم Fibers Enumerators ومجدولات الإدخال والإخراج غير المتزامن.
التالي: Ractors، التي تمنحك أخيرًا توازيًا حقيقيًا.
الأسئلة الشائعة
هل درس «Fibers» مجاني؟
نعم — نص درس «Fibers» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Ruby Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Ruby Academy 4 دروس في المجموع.
ماذا ستتعلم في «Fibers»؟
التزامن التعاوني تتمرن على Ruby Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Ruby Academy؟
لا تُشترط خبرة سابقة. Ruby Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «Fibers»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Ruby Academy هذا؟
نعم. كل درس في Ruby Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.