Wikipedia でユーザースレッドがカーネルスレッドにどのようにマップされるかについて読んでいました。この記事から、FreeBSDが1:1(カーネルレベルのスレッド化)を使用していることがわかります。
したがって、アプリケーションによって作成された各ユーザースレッドは、カーネルスレッドにマップされます。スレッド内の新しい各要求を処理するWebサーバーを構築していて、FreeBSDで実行していると想定すると、コアの数が増えてアプリケーションの全体的なパフォーマンスが向上しますか?
私はこの質問を読みました CPUコア:多いほど良いですか? ですが、ユーザースレッドとカーネルスレッド間の1:1マッピングによって回答の範囲が特に影響を受けるようにしたいと思います。
簡単な答えはイエスです。
長い答えは.... CPUコアが多いということは、処理能力が高いということです。 PHP/Ruby/Python /などのWebアプリケーションの場合、同時接続を処理するためのより多くのリソースを意味します。より多くのコアを持つことは、負荷の高いアプリケーションの場合に本当に違いを生みます。
私の個人的な意見では、より多くの処理能力とより多くのRAMのどちらかを選択する場合、ほとんどの場合、より多くのRAMを選択します。RAMを使用すると、ディスクI/Oであるボトルネックを減らすことができます。
PHP APC 、 ワニス 、および MySQLチューニング (テーブルキャッシュ、クエリキャッシュなど)などのキャッシュシステムを使用すると、次のことができます。コンテンツを生成するためにより多くのCPUパワーを必要とせずに、Webサイトのパフォーマンスを大幅に向上させます。
Webサイトをキャッシュできる場合は、この選択を行ってください。 CPUコアの数を増やすだけでは、長期的には選択肢を失うことになります。
はい。
最新のWebサーバーソフトウェアは、サーバーに接続するコンピューターごとに個別のプロセスまたはスレッドを使用します。さらに、MySQLやPHPなどのバックエンドソフトウェアも、サービスを提供する必要のあるユーザーごとに別々のプロセスまたはスレッドで実行されるため、コアを増やすと常に役立ちます。
もちろん、より集中的な環境では、ディスクパフォーマンス、メモリ、またはネットワーク帯域幅がボトルネックになる可能性があります。メモリが増えると、読み取りキャッシュが増え、低速のディスクストレージへのアクセスが減ります。 Biapyが提案しているように、1秒あたりに大量のリクエストを処理する場合は、Varnishなどの特殊なキャッシュソフトウェアを調べる必要があります。これにより、システムの負荷が大幅に軽減されます。
いつものように、答えはそれが依存するということです。
たとえば、スレッドを使用していなくても、 nginx Webサーバー 非常によく機能します です。代わりに、イベント駆動型アーキテクチャを使用します。複数のワーカープロセスを使用できるため、複数のコアを使用できます。
リンクされたパフォーマンス測定でわかるように、同時接続の量が増えると、スレッド化されたApache Webサーバーはより多くのスレッドを生成し、より多くのメモリを使用します。 nginxが使用するメモリの量はほぼ一定です。また、1秒あたりに処理されるリクエストの量では、nginxはApacheに大幅に勝っています。
したがって、スレッドが常に最良のソリューションであるとは限りません。
パフォーマンスは、データが存在する場所にも依存します。ハードディスクにパークされている場合、RAMにある場合と比較してアクセスが遅くなり、RAMはプロセッサキャッシュよりもはるかに遅くなります。 Webサーバーを高速化したい場合は、 varnish のようなアクセラレータの使用を検討してください。 Webサービスのパフォーマンスに関するワニスの筆頭著者による この記事 を読むことを検討してください。ここでのメッセージは、オペレーティングシステムの組み込みのチャッキングメカニズムを使用する必要があり、自分で同じ仕事をしようとしないでくださいということです。