ReactPHPは非同期の非ブロッキングI / Oをどのように処理しますか?
Nodejsは、さまざまなスレッドでI / Oを処理するイベントキューを使用します。これにはlibuvを使用します。PHPの場合と同様に、そのようなものはありません。ReactはシングルスレッドでノンブロッキングI / Oプロセスをどのように処理しますか?
React PHPは、アプリケーションの主要なイベントループを提供します。コードはすべて1つのスレッド上にあるため、ブロックしない方法でコードを記述する必要があります。これに対する可能な解決策はすべて、ほとんどのphp開発者が慣れていると確信しているのとは異なる方法でphpを使用することを中心に展開しています... ReactPHPはメインループを提供しますが。React PHPライブラリの大部分は、ソケット/ストリーム/プロミスなどの実装です。これらはすべて、I / Oへのノンブロッキングアクセスを実現するための方法を採用しています。通常はstream_set_blocking
(http://php.net/manual/en/function.stream-set-blocking.php)を使用します
他のオプションには、FSM(https://en.wikipedia.org/wiki/Finite-state_machine)に似たもののプログラミングが含まれます。これにより、進行中に現在の状態を継続的に更新できます。毎回、コードの特定のチャンクを実行できるようにしてから、ループ内の他の何かにスレッドを放棄します。基本的に独自のタイムスライシングを実装します(https://en.wikipedia.org/wiki/Preemption_(computing)#Time_slice)
もう1つのオプションは、通常はデフォルトで有効になっていないスレッド(http://php.net/manual/en/book.pthreads.php)を実装することです。そして、私が考えることができる最後のオプションは、プロセス制御を使用して、* nixシステムでのみ有効になっている他のプロセス(http://php.net/manual/en/intro.pcntl.php)をフォーク/スタート/制御することです。これにより、ホストCPUがタイムスライスを制御できるようになります。スレッドセーフ、メッセージングキューとの通信、またはその他のメカニズムのいずれかになるようにアプリケーションを設計する必要があります。
tldr; アプリケーションアーキテクチャを使用して、phpをブロックさせないようにしたり、ストリームをブロックしないように設定したり、スレッド/プロセス制御を使用して独自のマルチスレッドを管理したりします。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加