ホームページ  >  記事  >  バックエンド開発  >  ソケット - PHP マルチスレッド、マルチプロセスを使用しますか? ?

ソケット - PHP マルチスレッド、マルチプロセスを使用しますか? ?

WBOY
WBOYオリジナル
2016-09-21 14:13:141363ブラウズ

I. php マルチプロセスの使用法は何ですか? ? (ほとんどの php プログラムで使用されます | ほとんど使用されません)

II. php マルチスレッドの使用法は何ですか? ? (ほとんどの php プログラムで使用されます | ほとんど使用されません)

III. PHP マルチプロセスと PHP マルチスレッドは Java とどう違うのですか? ? (単にひどい | それほどでもない)

インターネット上のほぼすべての人が、PHP はマルチスレッドに適していないと書いています (マルチプロセスにも適していないのでしょうか??) これは、マルチスレッドや、マルチスレッドなどの PHP 関連の機能を理解する必要がないことを意味します。マルチプロセス? ?

そして最近、個人的な好みにより、QQ に似た Web ベースのチャット ツールを作成したいと考えています。ソケット通信については基本的に理解しましたが、Workerman のようなオープンソースの通信フレームワークについても学びました。

ソケット - PHP マルチスレッド、マルチプロセスを使用しますか? ?

ソケット - PHP マルチスレッド、マルチプロセスを使用しますか? ?

ソケット - PHP マルチスレッド、マルチプロセスを使用しますか? ?

I. PHP マルチプロセスはマルチコア CPU を活用し、パフォーマンスを向上させ、高い同時実行性をサポートできますか? ?

II. 単一の php プロセスは数千、さらには数万の同時接続をサポートでき、複数のプロセスは数十万、さらには数百万の同時接続をサポートできます。 この文をどう理解すればいいでしょうか? ? 通信にソケットを使用するため、ポートの数は実際には固定されており、65536 を超えることはありません。1 つのポートは、ここで言及されている数千の接続を表します。「数万の方が良いかもしれません。マルチプロセスでは数十万または数百万です。彼らはそんなに強力ですか? ?

返信内容:

I. php マルチプロセスの使用法は何ですか? ? (ほとんどの php プログラムで使用されます | ほとんど使用されません)

II. php マルチスレッドの使用法は何ですか? ? (ほとんどの php プログラムで使用されます | ほとんど使用されません)

III. PHP マルチプロセスと PHP マルチスレッドは Java とどう違うのですか? ? (単にひどい | それほどでもない)

インターネット上のほぼすべての人が、PHP はマルチスレッドに適していないと書いています (マルチプロセスにも適していないのでしょうか??) これは、マルチスレッドや、マルチスレッドなどの PHP 関連の機能を理解する必要がないことを意味します。マルチプロセス? ?

そして最近、個人的な好みにより、QQ に似た Web ベースのチャット ツールを作成したいと考えています。ソケット通信については基本的に理解しましたが、Workerman のようなオープンソースの通信フレームワークについても学びました。

ソケット - PHP マルチスレッド、マルチプロセスを使用しますか? ?

ソケット - PHP マルチスレッド、マルチプロセスを使用しますか? ?

ソケット - PHP マルチスレッド、マルチプロセスを使用しますか? ?

I. PHP マルチプロセスはマルチコア CPU を活用し、パフォーマンスを向上させ、高い同時実行性をサポートできますか? ?

II. 単一の php プロセスは数千、さらには数万の同時接続をサポートでき、複数のプロセスは数十万、さらには数百万の同時接続をサポートできます。 この文をどう理解すればいいでしょうか? ? 通信にソケットを使用するため、ポートの数は実際には固定されており、65536 を超えることはありません。1 つのポートは、ここで言及されている数千の接続を表します。「数万の方が良いかもしれません。マルチプロセスは数十万または数千です。」何百万もの賭けがそんなに強力ですか? ?

概念を修正します。ポートの総数は符号なしの短整数で、65535 です。これは、サーバーがサポートできる接続数が限られているという意味ではありません。 1 つのポートは 1 つのプロセスに対応し、プロセスの接続数はプロセスによって開かれた接続の数と一致します。もちろん、記述子の数は 32 ビット int 程度です。システムにはプロセスの記述子の最大数に制限があり、カーネル パラメータを通じて設定できますが、数十万であっても問題ありません。 socket描述符

典型的なマルチプロセス http サーバーの動作原理は、大まかに次のとおりです。プロセスは、ポート 80 での接続を監視する責任があります。接続が到着すると、対応する記述子がカーネルによって作成され、プロセスは相対的なアイドル 1

、正確に 子プロセスのため、親プロセスと子プロセスの間で記述子を渡すことができます。アクセス数が増加し、子プロセスの数が不十分な場合、親プロセスは、ディスクリプタを適切に処理するために新しい子プロセスを作成できます。親プロセスは、ある程度の単純な負荷分散戦略を実装する必要があります。 子进程来处理这个描述符,即在这个描述符上读写数据。注意这里是子进程

マルチスレッドに基づく http サーバーの動作原理は実際には似ており、上記の

も同様に説明できます。 进程改成线程

上記の説明は PHP とは何の関係もありません。PHP はこれらの基礎となる概念とシステム コールをカプセル化しているだけです。ほとんどの人は、php スクリプト インタプリタに基づいた php を使用します。そして workerman は、php でカプセル化されたシステム コールに基づいて実装された http サービスである必要があります。

  • PHP プロセスは php-fpm (fastcgi の実装) によって管理されます。マスター プロセスはリクエストを子プロセスに分散します

    • マスタープロセス: サービスはWebサーバーと通信します

      • 通信実装方法 1: http ソケット (ホスト + ポート)、1 つのポートを占有するため、php-fpm はここで 1 つのポートのみを占有することになります

      • 通信実装方法 2: Unix ドメイン ソケット (プロセス間通信)。これは .sock ファイルに基づいており、ネットワーク プロトコルに依存しないため、理論的にはポートを占有しません

    • プールプロセス: パーサー、解析スクリプトを含む子プロセス

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。