هل يحسب وقت النوم للحصول على الحد الزمني للتنفيذ؟

StackOverflow https://stackoverflow.com/questions/740954

  •  09-09-2019
  •  | 
  •  

سؤال

لدي سؤالان يتعلق ب sleep() وظيفة في PHP:

  1. هل يؤثر وقت النوم على الحد الأقصى للتنفيذ الحد الأقصى لبرامج البرامج النصية الخاصة بي PHP؟ في بعض الأحيان، يوضح PHP الرسالة "تجاوز الحد الأقصى لوقت التنفيذ لمدة 30 ثانية". هل تظهر هذه الرسالة إذا كنت تستخدم sleep(31)?

  2. هل هناك أي مخاطر عند استخدام sleep()وظيفة؟ هل يكلف الكثير من أداء وحدة المعالجة المركزية؟

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

المحلول

يجب أن تحاول ذلك، فقط لديك برنامج نصي ينام لأكثر من الحد الأقصى لوقت التنفيذ الخاص بك.

<?php
  sleep(ini_get('max_execution_time') + 10);
?>

المفسد: تحت Linux، يتم تجاهل وقت النوم، ولكن تحت ويندوز، فإنه يهم وقت التنفيذ.

نصائح أخرى

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

  • max_execution_time. التوجيه في php.ini الخاص بك. هذا هو إعداد عالمي؛
  • استخدام ini_set () مع التوجيه أعلاه. سيؤدي ذلك إلى تغيير ذلك فقط للحصول على البرنامج النصي المنفذ حاليا لهذا التنفيذ؛
  • مجموعة المهلة(): أيضا تغيير محلي.

بالنسبة للفرق بين الأخيرين، أعتقد أن MAX_EXECECTRECTION_TIME هي كمية ثابتة. ادارة:

ini_set('max_execution_time', 60);

سوف تحد من البرنامج النصي إلى 60 ثانية. إذا بعد 20 ثانية، اتصلت:

set_time_limit(60);

سيقتصر البرنامج النصي الآن على 20 + 60 = 80 ثانية.

من PHP Sleep () صفحة, ، هناك ملاحظة سهم المستخدم:

ملاحظة: الدالة SET_TIME_LIMIT () وإدارة التكوين MAX_EXECENTION_TIME تؤثر فقط على وقت تنفيذ البرنامج النصي نفسه. في أي وقت يقضيه في النشاط الذي يحدث خارج تنفيذ البرنامج النصي مثل مكالمات النظام باستخدام النظام ()، فإن وظيفة النوم ()، استعلامات قاعدة البيانات، إلخ. لا يتم تضمينها عند تحديد الحد الأقصى للوقت الذي تم تشغيل البرنامج النصي.

لقد غطى الآخرون بالفعل أساسيات النوم () و PHP Script Execution Time، ولكن يجب أن تكون على دراية بمخاطر أخرى عند استخدام فترات النوم الطويلة حقا.

عادة، عندما يرسل المستعرض طلبا إلى خادم ولا يتلقى أي بيانات من الخادم، يمكن للاتصال مهلة. يعتمد هذا الحد الزمني على تكوينات المتصفح، لكنني قرأت أن IE7 لديه قيمة افتراضية لمدة 30 ثانية فقط، في حين Firefox لديه قيمة افتراضية 115 ثانية- يمكنك التحقق من التكوين الخاص بك في فايرفوكس من خلال الذهاب إلى حول: التكوين والتصفية ل Network.http.keep-illive.timeout. (يتم تحديد المهلة الزمنية في ثوان).

تحرير: كان لدي وحدات للشبكة. http.kebe-onive.timeout and browser.urlbar.search.timeout مختلط. في الواقع في ثوان، وليس أعشار الثانية.

أ) نعم، فإنه يحسب نحو المهلة الزمنية (حتى النوم (31) سيؤدي إلى خطأ)

ب) أنه يعكس أداء تكلفة وحدة المعالجة المركزية - يتيح التطبيقات الأخرى استخدام وحدة المعالجة المركزية (عندما ينام الطلب، سيكون استخدام وحدة المعالجة المركزية لهذا التطبيق بالقرب من 0٪). بصرف النظر عن أخذ وقت بعيدا عن المستخدم، لا أستطيع التفكير في أي مخاطر باستخدام هذا.

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