Nodejs ليست متعددة الخيوط، ولكنها ذات ترابط واحد؛ تستخدم Nodejs وضعًا غير متزامن أحادي الترابط، نظرًا لمحرك JavaScript، تكون العقدة أحادية الترابط بشكل افتراضي طريقة "الإدخال/الإخراج" المبنية على الأحداث وغير المتزامنة لتحقيق بيئة تشغيل أحادية الترابط وعالية التزامن.

بيئة تشغيل هذه المقالة: نظام Windows 10، إصدار Nodejs 12.19.0، كمبيوتر Dell G3.
العقدة أحادية الترابط وتستخدم وضع عدم الحظر غير المتزامن ذي الخيط الواحد.
بسبب محرك JavaScript، تكون العقدة أحادية الترابط بشكل افتراضي، ولا يمكن لتطبيق Node.js استخدام موارد متعددة النواة.
يستخدم Node.js عمليات الإدخال/الإخراج غير المتزامنة والمعتمدة على الأحداث لتنفيذ بيئة تشغيل ذات ترابط واحد وعالية التزامن، مما يعني أنه يمكن القيام بشيء واحد فقط في نفس الوقت.
تطبق Nodejs أسلوبًا غير متزامن وغير محظور:
في Nodejs، يكون تنفيذ JS فقط هو في الواقع خيط واحد، ومن الواضح أن الإدخال/الإخراج هو سلاسل رسائل أخرى.
يعد مؤشر ترابط تنفيذ JS ذو خيط واحد طالما تم تمرير الإدخال / الإخراج المطلوب إلى libuv، فسيعود للقيام بأشياء أخرى على الفور، ثم سيتصل libuv مرة أخرى في الوقت المحدد.
بالتفصيل، تستدعيها Nodejs أولاً من كود JS في روابط العقدة إلى كود C/C، ثم تقوم بتغليف ما يسمى "كائن الطلب" في كود C/C وتمريره إلى libuv. بعض كائنات الطلب هذه تشبه عمليات رد الاتصال للوظائف التي يجب تنفيذها، ما عليك سوى تنفيذ رد الاتصال إلى libuv وتنفيذ رد الاتصال بعد التنفيذ.
باختصار، العملية العامة للإدخال/الإخراج غير المتزامن هي كما يلي.
1. ابدأ مكالمة الإدخال/الإخراج
يستدعي المستخدم وحدة Node الأساسية من كود Javascript ويمرر المعلمات ووظائف رد الاتصال إلى الوحدة الأساسية
تقوم الوحدة الأساسية للعقدة بتغليف المعلمات التي تم تمريرها ووظائف رد الاتصال في كائن الطلب.
ادفع كائن الطلب هذا إلى تجمع مؤشرات ترابط الإدخال/الإخراج لانتظار التشغيل؛
ينتهي استدعاء Javascript غير المتزامن، ويستمر مؤشر ترابط Javascript في تنفيذ العمليات اللاحقة.
2. تنفيذ رد الاتصال
بعد اكتمال عملية الإدخال / الإخراج، يتم استرداد وظيفة رد الاتصال التي تم تغليفها مسبقًا في كائن الطلب وتنفيذها لتحقيق غرض رد اتصال Javascript. (تفاصيل رد الاتصال هنا موضحة أدناه)
يمكن أن نرى من هنا أننا في الواقع أسيء فهم الخيط الوحيد لـ Node.js.
في الواقع، يشير الخيط الفردي إلى خيط واحد في بيئة تشغيل Javascript، ولا يمتلك Node.js القدرة على إنشاء سلاسل رسائل جديدة عند تشغيل Javascript. لا يزال يتم تنفيذ العمليات الفعلية النهائية في Libuv وحلقة الأحداث الخاصة به. ولهذا السبب، تستطيع Javascript، وهي لغة ذات ترابط واحد، تنفيذ عمليات غير متزامنة في Node.js. ولن يتعارض الاثنان.
قم بتوسيع معرفتك:
نظرة عامة على تعدد مؤشرات الـ Node.js
قد يقول بعض الأشخاص أنه على الرغم من أن Node.js أحادي الترابط، إلا أنه يمكنه استخدام الأحداث الدورية (Event Loop) لتنفيذ مهام التنفيذ المتزامنة. للتحقق من جوهرها، تستخدم NodeJs في الواقع خيطين مختلفين، أحدهما هو الخيط الرئيسي لمعالجة أحداث الحلقة، والآخر هو بعض الخيوط المساعدة في تجمع العمال. الوظائف والعلاقات الرئيسية لهذين الموضوعين هي كما يلي:

التعلم الموصى به: "الفيديو التعليمي لـnodejs"
ما ورد أعلاه هو تفاصيل ما إذا كانت العقدة متعددة الخيوط لمزيد من المعلومات، يرجى الانتباه إلى المقالات الأخرى ذات الصلة على هذا الموقع!