تكرار السؤال: …
الإجابة المختصرة
ينفذ كود JavaScript في خيط واحد رئيسي، لكن الـ I/O غير حاجب بفضل تفويض العمليات لنواة نظام التشغيل والـ event loop، مما يمكن خيطاً واحداً من خدمة آلاف الاتصالات.
الشرح
أحادية الخيط تعني أن تعليمات JavaScript وتحديث المتغيرات تجري بتسلسل داخل خيط رئيسي واحد، فلا توجد data races على مستوى الذاكرة بين تعليمتين متزامنتين. لكن الـ race conditions المنطقية تظل ممكنة بين نقاط await: مثلاً طلبان يقرآن الرصيد نفسه ثم يكتبان فوقه بعد عملية I/O، فيضيع أحد التحديثين (check-then-act). عندما يبدأ طلب I/O، تسجل Node.js الـ callback وتفوض العملية لنواة النظام، وتعود فوراً لمعالجة طلبات أخرى.
مثال بالكود
import http from "node:http";
http.createServer((req, res) => res.end("OK")).listen(3000);أخطاء شائعة
- تنفيذ عمليات معالجة مكثفة للـ CPU مباشرة في الخيط الرئيسي مما يجمد كل الطلبات الأخرى.