バックエンドが thinkphp フレームワークを使用し、ページ上の複数の ajax がバックエンド サーバーにアクセスする場合、この時点でバックエンド サーバーはシングル スレッドまたはマルチスレッドで非同期的に動作しますか?知っている方教えて頂ければ幸いです
バックエンドが thinkphp フレームワークを使用し、ページ上の複数の ajax がバックエンド サーバーにアクセスする場合、この時点でバックエンド サーバーはシングル スレッドまたはマルチスレッドで非同期的に動作しますか?知っている方教えて頂ければ幸いです
デフォルトはマルチスレッドではなくマルチプロセスであり、1 つのプロセスが 1 つのリクエストを処理します。 PHP マルチスレッドには拡張機能実装のインストールが必要ですが、PHP で Web サーバーを実装し、マルチスレッドを使用してリクエストを分散しない限り、同じプロセスが http リクエストを受信します。1 つのスレッドと 1 つのリクエストを実装できます。
Apache はデフォルトでプリフォーク動作モードになります。PHP はリクエストに応じて新しいプロセスが作成されます。プロセスの最大数は Apache の設定によって異なります。 nginx は fast-cgi を介して php-fpm と通信します。これもリクエストごとのプロセスです。プロセスの最大数は php-fpm の設定によって異なります。
リクエストのバックエンド処理時間が長すぎてブロックされ、複数の同一リクエストでプロセス数がいっぱいになる場合、後続のリクエストはすべて利用可能なソケットを待機することになります
これは、サーバーがシングルスレッドであるかマルチスレッドであるか、さらにはマルチプロセスであるかによって異なります。
私が理解していることは单线程
和多线程
これです
たとえば、フォーム上传文件
, 这只是一个请求, 你只发起了上传文件这一个请求, 服务器在收到你的上传文件请求后, 发现你的这文件可真大啊, 他想要是自己一个人扛的话估计晚上10点都不能下班, 然后就自动(fork
) を使用していくつかのヘルパーを作成する場合、ファイルのアップロードを完了するのに役立ついくつかの新しいスレッドを生成するのと同じです。そのため、大規模なファイルのアップロードを数分で完了できるようにする必要があります。これはマルチスレッドです
シングルスレッドとは、一人が夜明けまで一生懸命働かなければならないことを意味します
client
发起的多少请求, 客服端同时发起一万个请求(无论同步还是异步), 这叫并发
、マルチスレッドとは何の関係もありません
単一スレッドは同時リクエストを実装できません。
次のシナリオを想像してみてください。ユーザーのダウンロード速度が 1K で、1M の画像をリクエストすると、サーバーがシングルスレッドの場合、次のリクエストが応答し始めるまでに 17 分かかります。明らかに、次のようなプレイは不可能です。これ。
したがって、Web サーバーはマルチスレッドである必要があります。
スレッド数に関しては、通常は 4 より大きい 1 桁です。ただし、これはブラウザの制限により、1 つのページで開始されるリクエストの数には制限があります。これが、Google の CDN ファイルを引用したページがスタックして読み込めない理由です。
私が混乱しているのは次のとおりです。 私が混乱しているのは、apache+php がブロックしており、nginx+php が非同期であるということです。では、Apache サーバーの場合、PHP は Ajax リクエストへの応答をブロックされますか?
php はシングルプロセスシングルスレッドモデルです。 あなたが言及した ajax リクエストも http リクエストと同等であるため、マルチスレッドはありません。 jsのajaxを非同期リクエストで実装しました! ! !
クライアント側の同時実行性とサーバー側のリクエスト処理方法 (シングルスレッド、マルチスレッド) は、アプリケーションのシナリオによって異なります。ほとんどのシナリオでは、サーバー側は並列でノンブロッキングです
。