يعد التزامن والتوازي من المفاهيم الأساسية في البرمجة الحديثة، مما يسمح للتطبيقات بأداء مهام متعددة في وقت واحد، إما من خلال التنفيذ المشذّب (التزامن) أو التنفيذ المتزامن (التوازي). PHP، المعروفة في المقام الأول بنموذج التنفيذ المتزامن، تطورت لدعم هذه النماذج من خلال تقنيات مختلفة.
يتبع PHP تقليديًا نموذج التنفيذ المتزامن، خاصة عند استخدامه مع Apache في إعداد خادم الويب النموذجي. في هذا النموذج، تتم معالجة كل طلب HTTP من خلال عملية PHP واحدة. تتضمن الخطوات المتبعة في معالجة الطلب ما يلي:
يضمن هذا النموذج البساطة وسهولة الفهم ولكنه قد يصبح غير فعال للمهام التي تتطلب تنفيذًا متوازيًا أو التعامل مع مهام متعددة في وقت واحد.
نظرًا لأن تطبيقات الويب أصبحت أكثر تعقيدًا، فقد زادت الحاجة إلى التنفيذ المتزامن والمتوازي في لغة PHP. دعونا نستكشف التقنيات التي تقدمها PHP لتحقيق هذه النماذج.
التعليمات البرمجية المتزامنة هي أبسط أشكال التنفيذ حيث يتم تنفيذ المهام واحدة تلو الأخرى.
echo "Synchronous Code Example:\n"; function synchronousFunction() { for ($i = 0; $iفي هذا المثال، يتم تنفيذ كل تكرار للحلقة بشكل تسلسلي، مع تأخير لمدة ثانية واحدة بين التكرارات. يعد هذا الأسلوب واضحًا ولكنه غير فعال بالنسبة للمهام المرتبطة بالإدخال/الإخراج أو التي تتطلب استخدامًا مكثفًا لوحدة المعالجة المركزية والتي يمكن أن تستفيد من التنفيذ المتوازي.
2. تفرع العملية
ينشئ Forking عملية جديدة (فرعية) تعمل بالتزامن مع العملية الأصلية (الأصل). وهذا مفيد لموازنة المهام.
echo "\nForking Process Example:\n"; function forkProcess() { $pid = pcntl_fork(); if ($pid == -1) { die('could not fork'); } else if ($pid) { echo "Parent Process: PID $pid\n"; pcntl_wait($status); // Protect against Zombie children } else { echo "Child Process: Hello from the child process!\n"; exit(0); } } forkProcess();في هذا الكود، يقوم pcntl_fork() بإنشاء عملية فرعية. يتم تنفيذ العمليات الرئيسية والفرعية بشكل متزامن، مما يسمح بتنفيذ المهام المتوازية. تنتظر العملية الأصلية انتهاء العملية الفرعية لتجنب إنشاء عمليات زومبي.
3. الخيوط
تتوفر إمكانات ترابط PHP من خلال ملحقات مثل pthreads. المواضيع أخف من العمليات وتشترك في نفس مساحة الذاكرة، مما يجعلها مناسبة للمهام التي تتطلب بيانات مشتركة.
if (!class_exists('Thread')) { die("Threads are not supported in this PHP build\n"); } echo "\nThreading Example:\n"; class MyThread extends Thread { public function run() { for ($i = 0; $i start(); $thread->join();يحدد هذا المثال فئة MyThread التي تعمل على توسيع الموضوع. يتم تنفيذ طريقة التشغيل في سلسلة رسائل جديدة، وتعمل بشكل متزامن مع سلسلة المحادثات الرئيسية. يعد هذا الأسلوب مفيدًا للعمليات المرتبطة بالإدخال/الإخراج حيث يمكن لسلاسل العمليات التعامل مع انتظار الموارد.
4. المولدات
توفر المولدات طريقة لتنفيذ إجراءات مشتركة بسيطة، مما يسمح للوظائف بالحصول على نتائج بشكل متكرر دون حظر البرنامج بأكمله.
echo "\nGenerators Example:\n"; function simpleGenerator() { yield 'First'; yield 'Second'; yield 'Third'; } $gen = simpleGenerator(); foreach ($gen as $value) { echo "Generator Yielded: $value\n"; }تستخدم المولدات الكلمة الرئيسية لإنتاج القيم واحدة تلو الأخرى، مما يسمح بإيقاف الوظيفة مؤقتًا واستئنافها، مما يسهل شكلاً من أشكال المهام المتعددة التعاونية.
لقد قطع PHP شوطا طويلا من جذوره المتزامنة لدعم أشكال مختلفة من التزامن والتوازي. في حين أن التعليمات البرمجية المتزامنة تظل بسيطة وفعالة في العديد من حالات الاستخدام، فإن تقنيات مثل عمليات التفرع والترابط واستخدام المولدات تفتح إمكانيات جديدة للتعامل مع المهام المعقدة والقابلة للتوازي بكفاءة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3