ما هو التجميع في الوقت المناسب (JIT)؟

جدول المحتويات:

ما هو التجميع في الوقت المناسب (JIT)؟
ما هو التجميع في الوقت المناسب (JIT)؟
Anonim

الترجمة Just-In-Time ، أو JIT ، هي تقنية يستخدمها مفسرو وقت التشغيل للغات مثل JavaScript و Cو Java لتقريب سرعات التنفيذ من الأداء الأصلي الذي توفره اللغات الثنائية المترجمة مسبقًا مثل C ++.

المجمعين مقابل المترجمين الفوريين

لا تعرف أجهزة الكمبيوتر كيفية تنفيذ لغات البرمجة عالية المستوى مثل C ++ ، على الأقل ليس بشكل مباشر. من أجل ترجمة التعليمات البرمجية التي يمكن للبشر قراءتها إلى شيء يمكن لوحدة المعالجة المركزية تشغيله ، يجب تحويله. عادةً ما يقوم الكمبيوتر بذلك من خلال إحدى طريقتين - التجميع أو التفسير.

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

يأخذ المترجم شفرة المصدر ويحولها إلى رمز آلة ثنائي قبل تشغيل التطبيق
يأخذ المترجم شفرة المصدر ويحولها إلى رمز آلة ثنائي قبل تشغيل التطبيق

ومع ذلك ، فإن المترجمين لديهم بعض الجوانب السلبية. يجب تجميع البرامج لمجموعات تعليمات وحدة المعالجة المركزية (مثل x86-64 أو ARM). علاوة على ذلك ، حتى أنظمة التشغيل التي تشترك في مجموعات التعليمات (مثل Windows و Linux ، وكلاهما يعمل على وحدات المعالجة المركزية Intel) يجب أن تحتوي على برامج مجمعة بشكل منفصل بسبب الاختلافات العديدة في كيفية عملها.

هذا يعني أنه بالنسبة لشيء مثل JavaScript ، والذي يجب إرساله عبر الإنترنت إلى العملاء المتصلين ، لا يمكن تجميعه مسبقًا ، لأن العميل يمكنه تشغيل أي مجموعة من مجموعة التعليمات ونظام التشغيل.

المترجمون الفوريون يتخذون مقاربة مختلفة. المترجم هو في الأساس روبوت برمجي يأخذ شفرة المصدر لبرنامج مثل JavaScript أو Python script ، ويتولى تنفيذ التنفيذ في وقت التشغيل. يعمل بشكل أساسي كطبقة وسطى بين الكود المصدري والجهاز ، حيث يقف في المكان الذي سيترجمه المترجم مباشرة.

يأخذ المترجم الشفري شفرة المصدر للبرنامج ويتولى تنفيذ التنفيذ في وقت التشغيل
يأخذ المترجم الشفري شفرة المصدر للبرنامج ويتولى تنفيذ التنفيذ في وقت التشغيل

هذا له فائدة كبيرة تتمثل في عدم الحاجة إلى إنشاء البرنامج لأي جهاز معين ؛ طالما أن الجهاز يمكنه تشغيل مترجم Python ، فيمكنه تشغيل أي نصوص Python.

ماذا يفعل تجميع JIT؟

لسوء الحظ بالنسبة للمترجمين الفوريين ، فهم بطيئون. يجب أن يترجم المترجم الشفهي الحقيقي ويتعامل مع كل تعليمات ، ويقوم بشكل أساسي بعمل المترجم لكل تنفيذ. يعد هذا عبئًا كبيرًا ، لذا في الواقع ، فإن معظم المترجمين الفوريين مثل محرك جافا سكريبت V8 وجافا فيرتشوال ماشين (JVM) و.تستخدم NET's Common Language Runtime تجميع Just-In-Time لتسريع المترجم الفوري.

تجميع Just-In-Time هو في الأساس مترجم يقوم بالمماطلة ، ويقوم فقط بتجميع الكود لكل دالة عند الحاجة. عندما تستدعي دالة ، إذا لم يراها مترجم JIT بعد ، فسيقوم بتجميع هذه الوظيفة (تطبيق أي تحسينات على الجهاز الذي يعمل عليه) وتشغيلها. في المرة التالية التي تستدعي فيها الوظيفة ، يكون لديها بالفعل رمز الجهاز في متناول اليد ، لذلك تحتاج فقط إلى البحث عنها من ذاكرة التخزين المؤقت.

يشير Just-In-Time إلى حقيقة أن المترجم الفوري ليس مضطرًا إلى تجميع التطبيق بالكامل مرة واحدة. يمكن أن يحدث ذلك بالتأكيد ، ولكن بالنسبة لتطبيق كبير ، فقد يؤدي ذلك إلى أوقات بدء تشغيل عالية جدًا. من الأفضل للأداء أن يقوم بالترجمة فقط عند الحاجة (أي في الوقت المناسب).

هل حقق تجميع JIT أداءً رائعًا؟

JIT هو حرفيا مجرد تحسين في الأداء مقارنة بالمترجمين الفوريين العاديين ، لذا بالمقارنة مع عدم القيام بذلك على الإطلاق ، فهو أسرع بكثير.ومع ذلك ، فإن تجميع التعليمات البرمجية ليس سريعًا بشكل خاص ، لذلك من الواضح أن إجراء التجميع في وقت التشغيل يأتي مع نتيجة أداء مقارنة بما إذا كان قد تم تجميعه مباشرة إلى الرمز الثانوي مسبقًا.

ومع ذلك ، نظرًا لأن تجميع JIT عادةً ما يتم تشغيله فقط في المرة الأولى التي يتم فيها استدعاء دالة ، فإن الوظائف شائعة الاستخدام ستشاهد فقط أداءً ناجحًا في الاستدعاء الأول. يمكنك اختبار هذا في Cباستخدام StopWatches - يلتقطون "ضوضاء خلفية". NET ، بما في ذلك الوقت الذي يقضيه في تجميع JIT في أول تشغيل للدالة.

الجانب السلبي الأساسي لتطبيقات JIT المترجمة هو وقت بدء التشغيل البارد ، حيث يجب تجميع آلاف الوظائف التي يتم استدعاؤها عند بدء التشغيل في البداية. يمكن أن تستغرق بعض تطبيقات الويب ASP. NET أكثر من دقيقة لتشغيل bootstrap ، ويرجع ذلك جزئيًا إلى الضغط العالي على مترجم JIT في البداية.

موضوع شعبي