سؤال

أحاول الحصول على بعض المقارنات الدقيقة لوقت التشغيل بين PHP وPython (وربما أي لغة أخرى يجب أن أقوم بتضمينها).التوقيت داخل البرنامج النصي ليس مشكلتي ولكن التوقيت داخل البرنامج النصي لا يأخذ في الاعتبار كل شيء بدءًا من لحظة تقديم الطلب لتشغيل البرنامج النصي وحتى الإخراج.

1) هل يستحق الأمر فعلاً أخذ مثل هذه الأشياء في الاعتبار؟

2) على افتراض أن الأمر يستحق أخذه بعين الاعتبار، كيف أفعل ذلك؟

أنا أستخدم جهاز Mac لذا يمكنني الوصول إلى أوامر Linux ولست خائفًا من تجميع/إنشاء أمر لمساعدتي، فأنا لا أعرف كيفية كتابة مثل هذا الأمر.

هل كانت مفيدة؟

المحلول

إذا كانت فكرتك هي مقارنة اللغات، فسأقول أن أي شيء خارجها ليس له صلة لأغراض المقارنة.

ومع ذلك، يمكنك استخدام أمر الوقت لقياس كل شيء ومقارنته بالتوقيت داخل البرنامج النصي.

مثله:

$ time script.php
HI!

real    0m3.218s
user    0m0.080s
sys     0m0.064s

سيعطيك وقت الساعة ووقت المستخدم (مترجم PHP) ووقت النظام (وقت نظام التشغيل)

إذا كنت تفكر في الويب، فسيصبح الأمر أكثر صعوبة لأنك ستخلط بين الحمل الزائد لخادم الويب وليس من السهل دائمًا مقارنته، على سبيل المثال، إذا كنت تستخدم WSGI v/s mod_php.ثم سيتعين عليك ربط المجسات بأجزاء خدمة الويب من السلسلة أيضًا

نصائح أخرى

  1. من المفيد أخذ السرعة بعين الاعتبار إذا كنت تقوم بتحسين التعليمات البرمجية.يجب أن تعرف بشكل عام سبب قيامك بتحسين التعليمات البرمجية (كما في:تستغرق مهمة معينة في قاعدة التعليمات البرمجية الموجودة لديك وقتًا طويلاً جدًا، وليس "سمعت أن PHP أبطأ من Python").إنه لا يستحق أخذ السرعة في الاعتبار إذا كنت لا تخطط فعليًا للتبديل بين اللغات.لا يعني مجرد قيام وحدة صغيرة واحدة بشيء أسرع قليلاً أن إعادة كتابة تطبيقك بلغة أخرى فكرة جيدة.هناك العديد من العوامل الأخرى لاختيار اللغة إلى جانب السرعة.

  2. أنت المعيار، بطبيعة الحال.قم بتشغيل قاعدتي التعليمات البرمجية عدة مرات وقارن التوقيت.يمكنك استخدام ال وقت الأمر إذا كان كلا البرنامجين قابلين للتنفيذ من الصدفة، أو يستخدمان وظيفة قياس الأداء الخاصة بكل لغة؛الحالة الأخيرة تعتمد بشكل كبير على اللغة الفعلية، بطبيعة الحال.

حسنًا، يمكنك استخدام أمر "الوقت" للمساعدة:

you@yourmachine:~$ time echo "hello world"
hello world

real    0m0.000s
user    0m0.000s
sys 0m0.000s
you@yourmachine:~$ 

وهذا سوف يتغلب على التوقيت خارج البيئة.

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

تأكد أيضًا من تشغيل اختباراتك بشكل متكرر حتى تتمكن من خصم التشغيل الأول (وتضمين تكلفة التشغيل الأول في تقريرك إذا كنت تريد ذلك).لقد أجريت بعض الاختبارات في Java، ويكون التشغيل الأول دائمًا هو الأبطأ نظرًا لأن JIT يقوم بعمله (وقد يكون نفس النوع من النتائج موجودًا في PHP وPython وأي لغات أخرى تحاول تجربتها).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top