1

私は、apacheに新しいリクエストごとに新しいスレッドを作成する解決策があると読んだが、まだいくつか質問がある。サーバー(ウェブなど)は複数のリクエスト/接続をどのように管理していますか?

1台のサーバーで何千もの管理が可能です(アプリケーションに依存しています)。

これはCPUによって異なりますか? RAM?帯域幅?

「同時に」(またはApacheが新しいスレッドを作成する)と言うとき、これらの接続は並列/同時実行されることを意味しますか?またはそれらは同時ですか?

これはサーバー自体によって異なりますか?例えばサーバーがマルチコアの場合、サーバーは両方とも並列(コア内の各スレッド)でも、現在でも(1つのコア内の複数のスレッドが同時に)実行できます。

1つのWebアプリケーションで何千もの接続を同時に処理したい場合、何が必要ですか?より多くの帯域幅を購入する? CPUの中に何か?

私はこれで新しく、良い説明が素晴らしいでしょう。 https://serverfault.com/questions/807458/how-does-a-server-e-g-web-manage-multiple-request-connections?noredirect=1#comment1025357_807458

+0

可能な限り質問を絞り込んでください。そうであるように、この問題はSOの形式にとっては広いと思われる。明確化のために –

答えて

2

は、サーバー上に複数の接続を処理する方法は2つあります。私は他のコミュニティでそうadvicedた原因

私は、ここに求めています。まず、異なるスレッドで異なる接続を処理できます。それは簡単で簡単です。また、複数のCPUコアで並行して作業することができますので、速度を上げたい場合は、複数のスレッドを使用します。

次に考慮する必要があるのは、CPUスレッドを使用すると、IOを実行する必要があります。データベースからデータを読み込み、mutexで待機し、クライアントにデータを送信することです。スレッドがIOを待っているとき、CPUは必要ないので、別のスレッドを実行することができます。したがって、利用可能なCPUコアよりも多くのスレッドを使用することは良いことです。そのような場合、スレッドはいくつかのコアで同時に実行されます。

しかし、すべてのリクエストに対して新しいスレッドを起動するのは高価です。あまりにも多くのオーバーヘッドが発生します。スレッドを生成する代わりに、スレッドプールを使用します。スレッドが要求を処理し終えると、スレッドは新しい要求を取ります。

まだ十分ではない場合、タスクスケジューリングのオーバーヘッドが大きすぎる場合は、非同期IOおよび/またはコルーチンに切り替えます。アプリケーション内でスケジューリングを行うことで、さらに高速に作業することができます。

これはCPUによって異なりますか? RAM?帯域幅?

これは主にあなたの仕事によって異なります。実際のサーバーのプロファイルを作成し、どこにボトルネックがあるのか​​を特定する必要があります。高負荷には普遍的な解決策はありません。

+0

感謝します。サーバーで同時に処理できるユーザーの数を同時に(または同時に)調べる方法はありますか?私は通常のPCを使用して...同時に何千もの要求に対応することができますか?または、それらのために私はより多くのCPU/RAM /帯域幅を取得する必要があります – user155293

+0

私は私のためにいくつかの仕事をするように頼むと仮定します。あなたは明日それを終えることができるでしょうか?より多くの時間やお金を助けてくれますか?あなたの質問に対する答えは同じです:それは仕事が何であるかによって異なります。 P.S.また、通常、同時接続ではパフォーマンスを測定しません。通常、リクエストは1秒あたりのリクエスト数で測定されます。 –

関連する問題