-----解決策---------
b のリクエストを同時に実行するtime
------解決策---------
実際には、これにはネットワーク モデルの問題が関係しています。
Apache の代わりに nginx が推奨されている理由をご存知ですか?
Apache は古いバージョンの Linux カーネルの選択モデルを使用するのに対し、nginx は 2.6 バージョンの epool モデルを使用するためです。
あなたが言及した特定の問題に戻ると、クライアント b が訪問すると、サーバーはクライアント b のリクエストを受け入れる前にクライアント a の処理結果を待ちます。これが選択モデルの仕組みです。リクエストを受信した後、レスポンスが終了するまで同じプロセスがハンドシェイク プロセス全体に続きます。このモデルは DDoS 攻撃に対しても脆弱です。
epool モデルは非同期です。サーバーがリクエストを受信した後、メインプロセスはタスクを適切に分割する責任を負い、残りのタスクは他のスレッドに処理を委託します。メインプロセスは応答して、対応するクライアントに戻ります。この動作方法では、各リクエストが相互にブロックされません。
しかし、このように説明しても、Apache は同時タスクを処理できないということが理解できないかもしれません。 1 つのリクエストがブロックされ、他のリクエストを受信できなくなりますか?もちろんそうではありません。n 個のプロセスが Apache ワーカー モードで開かれ、いわゆるブロッキングでは 1 つのプロセスのみがブロックされます。しかし、選択モデルの仕組みは非常に非効率的です。
この部分の知識については、libevent
を参照してください。