لا! لم تتعلم بشكل خاطئ أن JavaScript هي لغة مترابطة واحدة. إنها لغة ذات خيط واحد ولديها إمكانية الوصول إلى مؤشر ترابط رئيسي واحد لتنفيذ التعليمات البرمجية. لذلك عندما نتحدث عن البرمجة المتزامنة، فإننا نتحدث عن هذا الخيط الوحيد الذي يقوم بكل العمل الثقيل وينفذ التعليمات البرمجية الخاصة بنا.
ولكن في الواقع يستخدم محرك V8 وNode.js مكتبة C تسمى libuv للوصول إلى ستة سلاسل رسائل إضافية. يتم استخدام اثنين منها للقيام بجمع البيانات المهملة ويتم استخدام الباقي للقيام بمهام الخلفية مثل البرمجة غير المتزامنة.
نعم. عندما نقول أن الكود غير متزامن أو غير محظور، فإن ما يحدث بالفعل هو أن الكود غير المتزامن يتم تمريره إلى هذه الخيوط الإضافية مع رد الاتصال ويستمر الخيط الرئيسي في القيام بعمله دون حظر بقية الكود.
عند الانتهاء من التعليمات البرمجية غير المتزامنة، يتم دفع وظيفة رد الاتصال إلى قائمة انتظار الأحداث مع وجود خطأ أو البيانات المطلوبة. ثم تقوم حلقة الحدث بدفعها إلى مكدس الاستدعاءات ونحصل على النتيجة لفهم ذلك باستخدام بعض التعليمات البرمجية. دعونا نلقي نظرة على طريقة readfile لوحدة fs.
fs.readFile("demo.text","utf8",(err,data)=>{ if(error){ return error } console.log("output",data); })
في الكود أعلاه، يتم تمرير طريقة readfile إلى سلاسل العمليات الخلفية. تتم القراءة في الخلفية، وعندما يتم الانتهاء من ذلك، يتم دفع رد الاتصال إلى قائمة انتظار الأحداث مع وجود خطأ أو بيانات.
بمجرد وجود رد الاتصال، يتم تنفيذ رد الاتصال ويتبقى لنا إما خطأ أو البيانات كمخرجات.
شكرًا على القراءة، وآمل أن أكون قادرًا على شرح الوسائل المفردة في جافا سكريبت.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3