0Pricing
Ruby Academy · درس

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_s

Fibers مقابل الخيوط

الاختلافات الرئيسية:

  • يتولى وقت التشغيل جدولة الخيوط، بينما تتولى أنت جدولة 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.next

Fibers والإدخال والإخراج غير المتزامن

تتضمن 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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. الخيوط
  2. شرح GVL
  3. Fibers
  4. Ractors
← العودة إلى Ruby Academy