SimpleFork專案位址:https://github.com/huyanping/simple-fork-php基於PCNTL擴充的多進程進程並發框架,介面類似與Java的Thread和Runnable為什麼要寫SimpleFork 多進程程式的編寫相比較多執行緒編寫更加複雜,需要考慮進程回收、同步、互斥、通訊等問題。對於初學者來說,處理上述問題會比較困難。 尤其是訊號處理和進程通訊這塊,很難做到不出問題。 SimpleFork提供一套類似於JAVA多執行緒的進程控制接口,提供回收、同步、互斥、通訊等方案,開發者可以關注業務問題,不需要過多考慮進程控制。 引入composer require jenner/simple_forkrequirepath/to/SimpleFork/autoload.php依賴必須 ext-sysvsem 同步互斥鎖 ext -sysvshm 共享記憶體特性 提供進程池 自動處理殭屍進程回收,支援無阻塞呼叫 提供共享記憶體、System V 訊息佇列,支援無阻塞呼叫 提供共享記憶體、System V 訊息佇列、Semaphore提供Process和Runnable兩種方式實現進程 可以即時取得到進程狀態 shutdown所有進程或單獨stop一個進程時,可以註冊覆蓋beforeExit()方法,返回true則退出,false繼續運行(在某些場景,進程不能立即退出) 支援子進程運行時reload 注意事項 System V 訊息佇列由於程式退出時可能存在尚未處理完的資料,所以不會銷毀。如果需要銷毀,請呼叫$queue->remove()方法刪除佇列 共享記憶體會在所有進程退出後刪除 Semaphore物件會在物件回收時進行銷毀 進程池()進行殭屍行程回收,可以無阻塞呼叫 取得進程狀態(調用isAlive()方法)前,最好呼叫一個無阻塞的wait(false)進行一次回收,由於進程運行狀態的判斷不是原子操作,所以isAlive()方法不保證與實際狀態完全一致 如果你不清楚在什麼情況下需要在程序的最開始加入declare(ticks=1);,那麼最好默認第一行都加入這段聲明。 如何使用declare(ticks=1); declare(ticks=1); 這段聲明用於進程訊號處理。如果註冊了訊號處理器,程式會在未執行一行程式碼後自動檢查是否有尚未處理的訊號。 http://php.net/manual/zh/control-structures.declare.phpTODO 提供更多功能的进程池,模仿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教程有兴趣的朋友有所帮助。