首頁 > 後端開發 > php教程 > SimpleFork php多進程並發框架

SimpleFork php多進程並發框架

WBOY
發布: 2016-07-30 13:29:40
原創
1256 人瀏覽過
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.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教程有兴趣的朋友有所帮助。

    相關標籤:
    來源:php.cn
    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    熱門教學
    更多>
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板