كيف تعامل PHP المتغيرات في ذاكرة الوصول العشوائي؟

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

  •  21-09-2019
  •  | 
  •  

سؤال

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

هل سيضع PHP هذه المتغيرات 100 في RAM 100 مرة إذا كان 100 مستخدم يضرب الصفحة في نفس الوقت؟ أم أنها تخزن القيمة في وقت واحد فقط في وقت واحد ويتغذون جميع المستخدمين من ذلك؟

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

المحلول

يمكنك تجربة مع memory_get_usage() لمراقبة كيفية التعامل مع الذاكرة استجابة لإعلانات معينة. على سبيل المثال ، عملت ما يلي:

echo memory_get_usage(); // 84944
$var = "foo";
echo memory_get_usage(); // 85072
unset($var);
echo memory_get_usage(); // 85096

مقارنة بالتخزين في $_SESSION:

echo memory_get_usage(); // 85416
$_SESSION['var'] = "foo";
echo memory_get_usage(); // 85568
unset($_SESSION['var']);
echo memory_get_usage(); // 85584

نصائح أخرى

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

ومع ذلك ، أشك في أنك بحاجة حقًا إلى القلق ، فالنادر من المساحة التي يتم الاستيلاء عليها من قبل بعض المتغيرات مشكلة ؛ ستقوم العديد من تطبيقات PHP الكبيرة بتحميل آلاف المتغيرات لكل طلب ، ثم تنظيفها في نهاية الطلب. بصمة PHP ليست كبيرة بشكل رهيب ، والتحكم في الذاكرة أكثر تصل إلى طريقة النشر الخاصة بك من PHP (mod_php vs cgi/fastcgi) أكثر من أي شيء يتعلق بأي تطبيقات تقوم بتشغيلها.

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

تتم مشاركة صفحات التعليمات البرمجية فقط ضمنيًا بين العمليات. البيانات منفصلة للعمليات ودمجها للمواضيع ما لم يتم تجاوز هذا بشكل صريح عبر ذاكرة مشتركة على سبيل المثال SYSV.

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