I. php マルチプロセスの使用法は何ですか? ? (ほとんどの php プログラムで使用されます | ほとんど使用されません)
II. php マルチスレッドの使用法は何ですか? ? (ほとんどの php プログラムで使用されます | ほとんど使用されません)
III. PHP マルチプロセスと PHP マルチスレッドは Java とどう違うのですか? ? (単にひどい | それほどでもない)
インターネット上のほぼすべての人が、PHP はマルチスレッドに適していないと書いています (マルチプロセスにも適していないのでしょうか??) これは、マルチスレッドや、マルチスレッドなどの PHP 関連の機能を理解する必要がないことを意味します。マルチプロセス? ?
そして最近、個人的な好みにより、QQ に似た Web ベースのチャット ツールを作成したいと考えています。ソケット通信については基本的に理解しましたが、Workerman のようなオープンソースの通信フレームワークについても学びました。
I. PHP マルチプロセスはマルチコア CPU を活用し、パフォーマンスを向上させ、高い同時実行性をサポートできますか? ?
II. 単一の php プロセスは数千、さらには数万の同時接続をサポートでき、複数のプロセスは数十万、さらには数百万の同時接続をサポートできます。 この文をどう理解すればいいでしょうか? ? 通信にソケットを使用するため、ポートの数は実際には固定されており、65536 を超えることはありません。1 つのポートは、ここで言及されている数千の接続を表します。「数万の方が良いかもしれません。マルチプロセスでは数十万または数百万です。彼らはそんなに強力ですか? ?
I. php マルチプロセスの使用法は何ですか? ? (ほとんどの php プログラムで使用されます | ほとんど使用されません)
II. php マルチスレッドの使用法は何ですか? ? (ほとんどの php プログラムで使用されます | ほとんど使用されません)
III. PHP マルチプロセスと PHP マルチスレッドは Java とどう違うのですか? ? (単にひどい | それほどでもない)
インターネット上のほぼすべての人が、PHP はマルチスレッドに適していないと書いています (マルチプロセスにも適していないのでしょうか??) これは、マルチスレッドや、マルチスレッドなどの PHP 関連の機能を理解する必要がないことを意味します。マルチプロセス? ?
そして最近、個人的な好みにより、QQ に似た Web ベースのチャット ツールを作成したいと考えています。ソケット通信については基本的に理解しましたが、Workerman のようなオープンソースの通信フレームワークについても学びました。
I. PHP マルチプロセスはマルチコア CPU を活用し、パフォーマンスを向上させ、高い同時実行性をサポートできますか? ?
II. 単一の php プロセスは数千、さらには数万の同時接続をサポートでき、複数のプロセスは数十万、さらには数百万の同時接続をサポートできます。 この文をどう理解すればいいでしょうか? ? 通信にソケットを使用するため、ポートの数は実際には固定されており、65536 を超えることはありません。1 つのポートは、ここで言及されている数千の接続を表します。「数万の方が良いかもしれません。マルチプロセスは数十万または数千です。」何百万もの賭けがそんなに強力ですか? ?
概念を修正します。ポートの総数は符号なしの短整数で、65535 です。これは、サーバーがサポートできる接続数が限られているという意味ではありません。 1 つのポートは 1 つのプロセスに対応し、プロセスの接続数はプロセスによって開かれた接続の数と一致します。もちろん、記述子の数は 32 ビット int 程度です。システムにはプロセスの記述子の最大数に制限があり、カーネル パラメータを通じて設定できますが、数十万であっても問題ありません。 socket描述符
、正確に 子プロセスのため、親プロセスと子プロセスの間で記述子を渡すことができます。アクセス数が増加し、子プロセスの数が不十分な場合、親プロセスは、ディスクリプタを適切に処理するために新しい子プロセスを作成できます。親プロセスは、ある程度の単純な負荷分散戦略を実装する必要があります。 子进程
来处理这个描述符,即在这个描述符上读写数据。注意这里是子进程
も同様に説明できます。 进程
改成线程
上記の説明は PHP とは何の関係もありません。PHP はこれらの基礎となる概念とシステム コールをカプセル化しているだけです。ほとんどの人は、php スクリプト インタプリタに基づいた php を使用します。そして workerman
は、php でカプセル化されたシステム コールに基づいて実装された http サービスである必要があります。
PHP プロセスは php-fpm (fastcgi の実装) によって管理されます。マスター プロセスはリクエストを子プロセスに分散します
マスタープロセス: サービスはWebサーバーと通信します
通信実装方法 1: http ソケット (ホスト + ポート)、1 つのポートを占有するため、php-fpm はここで 1 つのポートのみを占有することになります
通信実装方法 2: Unix ドメイン ソケット (プロセス間通信)。これは .sock ファイルに基づいており、ネットワーク プロトコルに依存しないため、理論的にはポートを占有しません
プールプロセス: パーサー、解析スクリプトを含む子プロセス