GithubHelp home page GithubHelp logo

takumi-dev / parallel-for Goto Github PK

View Code? Open in Web Editor NEW

This project forked from hironobu-s/parallel-for

0.0 1.0 0.0 9 KB

ParallelFor is PHP class to iterate array in multi process.

License: MIT License

PHP 100.00%

parallel-for's Introduction

ParallelFor

紹介

PHPの配列に対する操作を、並列で行うクラスです。PHPのwhile, for, foreachなどのループの代わりに使用することを目的としています。

配列の各要素に以下のような処理を行う場合に、処理時間を短く出来る可能性があります。

  1. CPU時間のかかる処理を実行する場合
  2. DBアクセス、ネットワークアクセスなどブロックされる処理がある場合

1の場合はマルチコアなCPUでないと効果がありません。

動作環境

  • PHP5.3以降
  • pcntl系の関数が使用できること(mod_phpなどでは動作しません)

PHPをコンパイルするときに --enable-pcntl オプションをつけてください。また、yumやaptでインストールしたPHPでは、最初から使えることが多いようです。

仕組み

処理対象の配列をより小さな複数個の配列に分割して、それぞれをpcntl_forkで作成した子プロセスで処理し、結果をマージして返します。分割数は設定で変更できます。

配列の要素に対する処理内容と結果をマージする処理は、それぞれクロージャを作成して渡します。

詳しくはexampleディレクトリとtestディレクトリ内のファイルを見てください。

制約

  • 実行する前にDB接続、ネットワーク接続、ファイルハンドルなどの全てのリソース型を閉じるようにしてください。これは親プロセスがリソースをオープンしたまま子プロセスを作成し、子プロセス側でこれらを閉じる(スクリプト終了で自動的に閉じられるものも含む)とPHPの挙動が不安定になるからです。プロセスがいきなり終了したりします。

特にフレームワーク内で使用する場合、フレームワークが自動的に開いたDB接続などに注意してください。

注意事項

  • 共用型のレンタルサーバーや、学校、会社の共用で使用するサーバーでの実行には注意してください。最悪の場合リソースを食いつぶしてマシンを落とすことなるかもしれません。

TODO

  • 処理結果の順番が、元の配列の順番と一致するようにしたい
  • 配列を分割する方法がわりといい加減
  • 一時ファイルではなく共有メモリとかを使ってみたい(shmop関数)
  • 実行中にSIGTERMとかを受け取ると一時ファイルが残るのはよくない
  • 並列数をCPUコア数などから自動的に決定したい(PHPでできるのかな・・・)
  • 英語コメントが間違ってるかも

ライセンス

MTI License

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.