Heim > Backend-Entwicklung > PHP-Tutorial > SimpleFork PHP-Multiprozess-Parallelitäts-Framework

SimpleFork PHP-Multiprozess-Parallelitäts-Framework

WBOY
Freigeben: 2016-07-30 13:29:40
Original
1256 Leute haben es durchsucht
SimpleFork
Projektadresse: https://github.com/huyanping/simple-fork-phpMultiprozess-Prozess-Parallelitäts-Framework basierend auf der PCNTL-Erweiterung, der Schnittstelle ähnelt Javas Thread und RunnableWarum sollten wir SimpleFork schreiben?
Das Schreiben von Multiprozessprogrammen ist komplizierter als das Schreiben von Multithreads. Probleme wie Prozessrecycling, Synchronisierung und Gegenseitigkeit Ausgrenzung und Kommunikation müssen berücksichtigt werden. Für Anfänger wird es schwierig sein, mit den oben genannten Problemen umzugehen. Gerade im Bereich der Signalverarbeitung und Prozesskommunikation lassen sich Probleme nur schwer vermeiden. SimpleFork bietet eine Reihe von Prozesssteuerungsschnittstellen ähnlich dem JAVA-Multithreading, die Recycling, Synchronisierung, gegenseitigen Ausschluss, Kommunikation und andere Lösungen ermöglichen. Entwickler können sich auf geschäftliche Probleme konzentrieren und müssen nicht zu viel über Prozesssteuerung nachdenken. Einführung
composer require jenner/simple_forkrequirepath/to/SimpleFork/autoload.phpAbhängigkeit
Muss
  • ext-pcntl-Prozesssteuerung
  • Optional
  • ext-sysvmsg-Nachrichtenwarteschlange
  • ext-sysvsem-Synchronisations-Mutex-Sperre
  • ext-sysvshm Shared Memory
  • Funktionen
  • Prozesspool bereitstellen
  • Zombie-Prozessrecycling automatisch verarbeiten und nicht blockierende Aufrufe unterstützen
  • Bietet gemeinsam genutzten Speicher, eine System-V-Nachrichtenwarteschlange und eine Semaphorsperre, um die IPC-Kommunikation (Prozesskommunikation) zu erleichtern.
  • Bietet zwei Methoden, Process und Runnable, um den Prozess zu implementieren.
  • Kann erhalten Prozess in Echtzeit Status
  • Wenn Sie alle Prozesse herunterfahren oder nur einen Prozess stoppen, können Sie sich registrieren, um die Methode beforeExit() zu überschreiben. Geben Sie „true“ zurück, um zu beenden, und „false“, um die Ausführung fortzusetzen (in einigen Szenarien ist dies für den Prozess nicht möglich). sofort beenden)
  • Neuladen unterstützen, wenn der untergeordnete Prozess ausgeführt wird
  • Hinweise
  • Die System V-Nachrichtenwarteschlange wird nicht zerstört, da sie möglicherweise nicht zerstört wird Beim Beenden des Programms handelt es sich um unverarbeitete Daten. Wenn es zerstört werden muss, rufen Sie bitte die Methode $queue->remove() auf, um die Warteschlange zu löschen.
  • Der gemeinsam genutzte Speicher wird gelöscht, nachdem alle Prozesse beendet wurden.
  • Das Semaphore-Objekt wird gelöscht zerstört, wenn das Objekt recycelt wird
  • Nach dem Prozesspool start() müssen Sie wait() aufrufen, um den Zombie-Prozess zu recyceln.
  • Bevor Sie den Prozess abrufen status (Aufruf der isAlive()-Methode), es ist am besten, eine nicht blockierende Wartefunktion (false) aufzurufen. Da die Beurteilung des laufenden Prozesses keine atomare Operation ist, kann die isAlive()-Methode nicht garantiert werden dass es vollständig mit dem tatsächlichen Status übereinstimmt
  • Wenn Sie nicht wissen, unter welchen Umständen Sie es am Anfang der Programmdeklaration (ticks=1); hinzufügen müssen, dann ist es am besten, dies hinzuzufügen Anweisung standardmäßig in die erste Zeile ein.
  • Verwendung von „declare(ticks=1);“
  • „declare(ticks=1);“ Diese Deklaration wird zur Prozesssignalverarbeitung verwendet. Wenn ein Signalhandler registriert ist, prüft das Programm vor der Ausführung einer Codezeile automatisch, ob nicht behandelte Signale vorhanden sind. http://php.net/manual/zh/control-structures.declare.php
  • TODO
  •  提供更多功能的进程池,模仿java
  •  提供第三方进程通信机制(Redis等)
  •  更多的测试及示例程序
  • 示例程序
    更多示例程序见exmples目录simple.phpclassTestRunnableextends\Jenner\SimpleFork\Runnable{/** * 进程执行入口 * @return mixed */publicfunctionrun() {echo"I am a sub process".PHP_EOL; }}$process=new\Jenner\SimpleFork\Process(newTestRunnable());$process->start();shared_memory.phpclassProducerextends\Jenner\SimpleFork\Process{publicfunctionrun(){for($i=0; $i<10; $i++){$this->cache->set($i, $i);echo"set {$i} : {$i}".PHH_EOL; } }}classWorkerextends\Jenner\SimpleFork\Process{publicfunctionrun(){sleep(5);for($i=0; $i<10; $i++){echo"get {$i} : ".$this->cache->get($i) .PHP_EOL; } }}$memory=new\Jenner\SimpleFork\IPC\SharedMemory();$producer=newProducer();$producer->setCache($memory);$worker=newWorker();$worker->setCache($memory);$pool=new\Jenner\SimpleFork\Pool();$pool->submit($producer);$pool->submit($worker);$pool->start();$pool->wait();

    原创文章,转载请注明: 转载自始终不够

    本文链接地址: SimpleFork php多进程并发框架

    转载请注明:始终不够 ? SimpleFork php多进程并发框架

    以上就介绍了SimpleFork php多进程并发框架,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

    Verwandte Etiketten:
    Quelle:php.cn
    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
    Beliebte Tutorials
    Mehr>
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage