سؤال

لقد وجدت هذا حزمة PECL تسمى المواضيع, ، ولكن لا يوجد إصدار بعد.ولن يظهر أي شيء على موقع PHP.

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

المحلول

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

نصائح أخرى

من دليل PHP لـ pthreads امتداد:

pthreads عبارة عن واجهة برمجة تطبيقات موجهة للكائنات تسمح بتعدد مؤشرات الترابط للمستخدم في PHP.يتضمن جميع الأدوات التي تحتاجها لإنشاء تطبيقات متعددة الخيوط تستهدف الويب أو وحدة التحكم.يمكن لتطبيقات PHP إنشاء وقراءة وكتابة وتنفيذ ومزامنة مع Threads وWorkers وStackables.

بقدر ما يبدو هذا أمرًا لا يصدق، فهو صحيح تمامًا.اليوم، يمكن لـ PHP تعدد الخيوط لأولئك الذين يرغبون في تجربتها.

الإصدار الأول من PHP4، 22 مايو 2000، تم شحن PHP مع بنية آمنة لسلسلة الرسائل - وهي طريقة لتنفيذ مثيلات متعددة لمترجمها في سلاسل رسائل منفصلة في بيئات SAPI ( Server API ) متعددة الخيوط.على مدى السنوات الـ 13 الماضية، تم الحفاظ على تصميم هذه البنية وتطويرها:لقد تم استخدامه في الإنتاج على أكبر مواقع الويب في العالم منذ ذلك الحين.

لم يكن الترابط في أرض المستخدم أبدًا مصدر قلق لفريق PHP، ولا يزال كذلك حتى اليوم.يجب أن تفهم أنه في العالم الذي تعمل فيه PHP، توجد بالفعل طريقة محددة للتوسع - إضافة الأجهزة.على مدار السنوات العديدة التي ظهرت فيها لغة PHP، أصبحت الأجهزة أرخص فأرخص، وبالتالي أصبح هذا الأمر أقل أهمية بالنسبة لفريق PHP.وبينما أصبحت أرخص، أصبحت أيضًا أكثر قوة؛اليوم، تتميز هواتفنا المحمولة والأجهزة اللوحية ببنيات ثنائية ورباعية النواة والكثير من ذاكرة الوصول العشوائي (RAM) التي تتوافق معها، وعادةً ما تحتوي أجهزة الكمبيوتر المكتبية والخوادم لدينا على 8 أو 16 نواة، و16 و32 جيجابايت من ذاكرة الوصول العشوائي، على الرغم من أننا قد لا نتمكن دائمًا من الحصول على اثنين من النوى. في حدود الميزانية ونادرا ما يكون وجود جهازي سطح مكتب مفيدًا لمعظمنا.

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

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

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

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

من المعروف أن بعض المكتبات التي تستخدمها PHP ليست آمنة لسلاسل العمليات، ويجب أن يكون واضحًا للمبرمج أن pthreads لا يمكنها تغيير هذا، ولا يحاول المحاولة.ومع ذلك، فإن أي مكتبة آمنة لمؤشر الترابط تكون قابلة للاستخدام، كما هو الحال في أي إعداد آمن لمؤشر الترابط آخر للمترجم.

تستخدم pthreads Posix Threads (حتى في Windows)، ما ينشئه المبرمج هو خيوط تنفيذ حقيقية، ولكن لكي تكون هذه الخيوط مفيدة، يجب أن يكونوا على دراية بـ PHP - قادرين على تنفيذ تعليمات برمجية للمستخدم ومشاركة المتغيرات والسماح بوسائل اتصال مفيدة (تزامن).لذلك يتم إنشاء كل مؤشر ترابط باستخدام مثيل للمترجم، ولكن حسب التصميم، يتم عزل مترجمه عن جميع مثيلات المترجم الأخرى - تمامًا مثل بيئات واجهة برمجة التطبيقات للخادم متعددة الخيوط.يحاول pthreads سد الفجوة بطريقة عقلانية وآمنة.العديد من اهتمامات مبرمجي الخيوط في لغة C ليست موجودة بالنسبة لمبرمجي pthreads، حسب التصميم، يتم نسخ pthreads عند القراءة والنسخ عند الكتابة (ذاكرة الوصول العشوائي رخيصة)، لذلك لا يوجد مثيلان على الإطلاق يتعاملان مع نفس البيانات الفعلية ، لكن يمكن أن يؤثر كلاهما على البيانات الموجودة في موضوع آخر.إن حقيقة أن PHP قد تستخدم ميزات سلاسل الرسائل غير الآمنة في برمجتها الأساسية ليست ذات صلة على الإطلاق، وخيوط المستخدم وعملياتها آمنة تمامًا.

لماذا النسخ عند القراءة والنسخ عند الكتابة:

public function run() {
    ...
    (1) $this->data = $data;
    ...
    (2) $this->other = someOperation($this->data);
    ...
}

(3) echo preg_match($pattern, $replace, $thread->data);

(1) أثناء الاحتفاظ بقفل القراءة والكتابة في مخزن بيانات كائن pthreads، يتم نسخ البيانات من موقعها الأصلي في الذاكرة إلى مخزن الكائنات.لا يقوم pthreads بضبط إعادة حساب المتغير، ويمكن لـ Zend تحرير البيانات الأصلية إذا لم تكن هناك مراجع أخرى لها.

(2) تشير الوسيطة إلى someOperation إلى مخزن الكائنات، ويتم نسخ البيانات الأصلية المخزنة، والتي هي في حد ذاتها نسخة من نتيجة (1)، مرة أخرى للمحرك في حاوية zval، أثناء حدوث ذلك، يتم الاحتفاظ بقفل القراءة مخزن الكائنات، ويتم تحرير القفل ويمكن للمحرك تنفيذ الوظيفة.عندما يتم إنشاء zval، يكون له إعادة حساب بقيمة 0، مما يمكّن المحرك من تحرير النسخة عند اكتمال العملية، لأنه لا يوجد أي مراجع أخرى له.

(3) تشير الوسيطة الأخيرة لـ preg_match إلى مخزن البيانات، ويتم الحصول على قفل القراءة، ويتم نسخ مجموعة البيانات في (1) إلى zval، مرة أخرى مع إعادة العد 0.تم تحرير القفل، ويعمل استدعاء preg_match على نسخة من البيانات، وهي في حد ذاتها نسخة من البيانات الأصلية.

أشياء يجب معرفتها:

  • يعد جدول التجزئة الخاص بمخزن الكائنات حيث يتم تخزين البيانات آمنًا
    استنادًا إلى TsHashTable الذي تم شحنه مع PHP، بواسطة Zend.

  • يحتوي مخزن الكائنات على قفل للقراءة والكتابة، ويتم توفير قفل وصول إضافي لـ TsHashTable بحيث إذا تطلب الأمر (وهو يفعل ذلك، var_dump/print_r، الوصول المباشر إلى الخصائص حيث يريد محرك PHP الرجوع إليها) يمكن لسلاسل pthread التعامل مع TsHashTable خارج واجهة برمجة التطبيقات المحددة.

  • يتم الاحتفاظ بالأقفال فقط أثناء حدوث عمليات النسخ، وعندما يتم إجراء النسخ، يتم تحرير الأقفال، بترتيب معقول.

هذا يعنى:

  • عند حدوث كتابة ، لا يتم وضع قفل قراءة وكتابة فحسب ، بل قفل وصول إضافي.يتم تأمين الجدول نفسه ، ولا يوجد طريقة ممكنة يمكن أن تقفل سياق آخر أو يقرأه أو يكتبه أو يؤثر عليه.

  • عند حدوث قراءة ، لا يتم وضع قفل القراءة فحسب ، بل قفل الوصول الإضافي أيضًا ، مرة أخرى يتم إغلاق الجدول.

لا يمكن لسياقين الوصول فعليًا أو بشكل متزامن إلى نفس البيانات من مخزن العناصر، ولكن عمليات الكتابة التي تتم في أي سياق بمرجع ستؤثر على البيانات المقروءة في أي سياق بمرجع.

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

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

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

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

لا يشبه تعدد مؤشرات الترابط استخدام قاعدة بيانات جديدة، ويجب إيلاء اهتمام وثيق لكل كلمة في الدليل والأمثلة التي يتم شحنها مع سلاسل pthreads.

وأخيرًا، من دليل PHP:

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

وهنا مثال على ما اقترح يلكو:

$cmd = 'nohup nice -n 10 /usr/bin/php -c /path/to/php.ini -f /path/to/php/file.php action=generate var1_id=23 var2_id=35 gen_id=535 > /path/to/log/file.log & echo $!';
$pid = shell_exec($cmd);

وأساسا هذا ينفذ النصي PHP في سطر الأوامر، ولكن على الفور بإرجاع PID ثم يعمل في الخلفية. (و$ صدى! يضمن يتم إرجاع أي شيء آخر بخلاف PID). وهذا يسمح النصي PHP بالاستمرار أو الإقلاع عن التدخين إذا كنت تريد. عندما كنت قد استخدمت هذا، لقد إعادة توجيه المستخدم إلى صفحة أخرى، حيث كل 5 إلى 60 ثانية يتم استدعاء AJAX لمعرفة ما اذا كان التقرير لا يزال قيد التشغيل. (لدي جدول لتخزين gen_id والمستخدم انها المتعلقة.) يعمل البرنامج النصي الاختيار ما يلي:

exec('ps ' . $pid , $processState);
if (count($processState) < 2) {
     // less than 2 rows in the ps, therefore report is complete
}

وهناك وظيفة قصيرة على هذه التقنية هنا: <لأ href = "http://nsaunders.wordpress.com/2007/01/12/running-a-background-process-in-php/" يختلط = " noreferrer "> http://nsaunders.wordpress.com/2007/01/12/running-a-background-process-in-php/

باختصار:نعم، هناك مؤشرات ترابط متعددة في لغة php ولكن يجب عليك استخدام المعالجة المتعددة بدلاً من ذلك.

معلومات الخلفية:المواضيع مقابل.العمليات

هناك دائمًا بعض الالتباس حول التمييز بين الخيوط والعمليات، لذلك سأصف كليهما باختصار:

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

المعالجة المتعددة

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

في PHP لديك طريقتان لإنشاء عملية جديدة:

دع نظام التشغيل يقوم بذلك نيابةً عنك:يمكنك إخبار نظام التشغيل الخاص بك بإنشاء عملية جديدة وتشغيل برنامج نصي php جديد (أو نفس الشيء) فيها.

  • ل لينكس يمكنك استخدام ما يلي أو النظر فيها إجابة داريل هاين:

    $cmd = 'nice php script.php 2>&1 & echo $!';
    pclose(popen($cmd, 'r'));
    
  • ل شبابيك يمكنك استخدام هذا:

    $cmd = 'start "processname" /MIN /belownormal cmd /c "script.php 2>&1"';
    pclose(popen($cmd, 'r'));
    

افعل ذلك بنفسك بالشوكة:يوفر php أيضًا إمكانية استخدام التشعب من خلال الوظيفة pcntl_fork().يمكن العثور على برنامج تعليمي جيد حول كيفية القيام بذلك هنا لكنني أوصي بشدة بعدم استخدامه، منذ ذلك الحين الشوكة جريمة ضد الإنسانية وخاصة ضد OOP.

تعدد الخيوط

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

لا يوفر PHP القياسي أي تعدد مؤشرات الترابط ولكن هناك امتدادًا (تجريبيًا) يقوم بذلك بالفعل - pthreads.حتى أن وثائق API الخاصة بها وصلت إلى php.net.باستخدامه يمكنك القيام ببعض الأشياء بقدر ما تستطيع لغات برمجة حقيقية :-) مثله:

class MyThread extends Thread {
    public function run(){
        //do something time consuming
    }
}

$t = new MyThread();
if($t->start()){
    while($t->isRunning()){
        echo ".";
        usleep(100);
    }
    $t->join();
}

ل لينكس هناك دليل التثبيت هنا في Stackoverflow.

ل شبابيك هناك واحد الآن:

  • تحتاج أولاً إلى الإصدار الآمن من php.
  • أنت بحاجة إلى الإصدارات المترجمة مسبقًا لكل من pthreads وامتداد php الخاص به.يمكن تنزيلها هنا.تأكد من تنزيل الإصدار المتوافق مع إصدار PHP الخاص بك.
  • انسخ php_pthreads.dll (من الملف المضغوط الذي قمت بتنزيله للتو) إلى مجلد ملحق php الخاص بك ([phpDirectory]/ext).
  • انسخ pthreadVC2.dll إلى [phpDirectory] (المجلد الجذر - وليس مجلد الامتداد).
  • قم بتحرير [phpDirectory]/php.ini وأدخل السطر التالي

    extension=php_pthreads.dll
    
  • اختبره باستخدام البرنامج النصي أعلاه مع بعض النوم أو شيء ما حيث يوجد التعليق.

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

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

إذا اهتم أحد فقد أحيا php_threading (ليست مثل الخيوط، ولكنها متشابهة) ولقد وصلت بالفعل إلى النقطة التي تعمل فيها (إلى حد ما) بشكل جيد!

صفحة المشروع

تنزيل (لنظام التشغيل Windows PHP 5.3 VC9 TS)

أمثلة

التمهيدي

وpcntl_fork() هو ما كنت تبحث عنه، ولكن عمليته التفرع لا خيوط. لذلك سيكون لديك مشكلة تبادل البيانات. لحلها يمكنك استخدام phps ظائف ملوحة ( HTTP: //www.php. صافي / دليل / دي / ref.sem.php ) قوائم انتظار الرسائل قد يكون أسهل قليلا لبداية من شرائح الذاكرة المشتركة.

وعلى أي حال، ووضع استراتيجية انا استخدم في إطار الشبكة التي أنا النامية التي يحمل كتل كثيفة الموارد من صفحة على شبكة الإنترنت (وربما مع الطلبات الخارجية) بالتوازي: وأنا أفعل طابور العمل لمعرفة ما هي البيانات أنا أنتظر لوبعد ذلك مفترق من الوظائف لكل عملية. مرة واحدة القيام به تخزين البيانات في ذاكرة التخزين المؤقت APC تحت مفتاح فريد عملية الأصل يمكن الوصول إليها. مرة واحدة كل البيانات هناك استمرارها. أنا باستخدام usleep() بسيطة للانتظار لأمور عملية الاتصال غير ممكن في اباتشي (الأطفال سوف تفقد الاتصال لآبائهم وتصبح الكسالى ...). لذلك هذا يقودني إلى شيء آخر: من المهم أن النفس تقتل كل طفل! هناك كذلك الفئات التي عمليات شوكة ولكن تبقى البيانات، لم أكن دراستها ولكن الإطار زند لديها واحد، وأنها عادة ما تفعل بطيء ولكنه موثوق التعليمات البرمجية. يمكنك العثور عليها هنا: http://zendframework.com/manual/1.9/ EN / zendx.console.process.unix.overview.html أعتقد أنها تستخدم شرائح SHM! آخر بشكل جيد ولكن ليس آخرا هناك خطأ في هذا زند الموقع، خطأ صغير في المثال.

while ($process1->isRunning() && $process2->isRunning()) {
    sleep(1);
}
should of course be:
while ($process1->isRunning() || $process2->isRunning()) {
    sleep(1);
}

وهناك امتداد الخيوط التي activley وضعت على أساس بثريدس التي تبدو واعدة جدا في https://github.com/ krakjoe / بثريدس

وفقط تحديثا، ويبدو بأن PHP الرجال يعملون على دعم موضوع ولها متوفر في الوقت الحاضر.

وهنا هو الرابط إليه: http://php.net/manual/en/book.pthreads.php

ولدي فئة خيوط PHP التي تم تشغيل لا تشوبه شائبة في بيئة الإنتاج لأكثر من عامين.

وتحرير: هذا هو متاح الآن كمكتبة الملحن وكجزء من إطار MVC بلدي، Hazaar MVC

.

وانظر: https://git.hazaarlabs.com/hazaar/hazaar-thread

أعلم أن هذا سؤال قديم جدًا، لكن يمكنك إلقاء نظرة عليه http://phpthreadlib.sourceforge.net/

اتصال ثنائي الاتجاه، ودعم Win32، ولا يتطلب أي ملحقات.

وسمعت عن appserver من techdivision؟

وكما هو مكتوب في بي ويعمل appserver إدارة multithreads لتطبيقات PHP ارتفاع حركة المرور. لا يزال في مرحلة تجريبية ولكن promesing جدا.

وهناك ميزة غامضة إلى حد ما، وسيتم قريبا إهمال، ودعا <لأ href = "http://docs.php.net/manual/en/control-structures.declare.php#control-structures.declare. القراد "يختلط =" نوفولو noreferrer "> القراد . الشيء الوحيد الذي كنت قد استخدمت من أي وقت مضى ل، هو السماح للبرنامج نصي لالتقاط SIGKILL (السيطرة + C) وإغلاق بأمان.

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