تكرار السؤال: …
الإجابة المختصرة
هي خيوط عمل خفيفة جدًا (Lightweight Threads) يديرها وقت تشغيل Kotlin في وضع المستخدم (User-space) بدلاً من أن يديرها نظام التشغيل مباشرة.
الشرح
تخصيص Thread في نظام التشغيل يستهلك حوالي 1MB من الذاكرة ويحتاج إلى Context Switching مكلف عبر نواة النظام (Kernel). بينما الـ Coroutine لا تحجز مساحة مكدس (Stack) مخصصة؛ يمكن إيقافها واستئنافها دون حجب الـ Thread الفعلي، مما يسمح بتشغيل مئات الآلاف من الـ Coroutines في وقت واحد بكفاءة عالية على عدد محدود من الـ Threads.
مثال بالكود
// إطلاق 100,000 كوروتين خفيف بسلاسة دون استنزاف الذاكرة:
fun main() = runBlocking {
repeat(100_000) {
launch {
delay(1000L)
print(".")
}
}
}أخطاء شائعة
- حجب الـ Thread بواسطة Thread.sleep() داخل Coroutine بدلاً من استخدام دالة التعليق delay() غير الحاجبة.
- الاعتقاد بأن Coroutine تعني دائمًا العمل على Background Thread؛ إذ يمكن أن تعمل على الـ Main Thread إذا حُدد Dispatchers.Main.