2011-07-27 6 views
2

私はBASHなど、何が1つのコアだけを使用していても、どの種類のセットアップとソフトウェアスタックがCPU上のすべてのコアを使用するかに関係なく、疑問に思いますか?Webサーバー(および関連ソフトウェア)は、マシンのすべてのCPUコアを使用しますか?

Node.JSはすべてのコア、またはLEMPまたはLLMPスタックを使用しますか?

ウェブをコーディングし、すべての利用可能なシステムリソースを活用する方法は何ですか?

ありがとうございます。

+1

は、ソフトウェアの書き方(構成も)によって異なります。主にPHP、JS、Perlのようなウェブ上で使用される言語はすべてスレッド化されているので、並行してプログラミングすることは忘れてしまいます。 – lovesh

+0

言語内の並列性は必ずしも必要ありません。 1つのクライアントにそれぞれ対応するPHPスクリプトを並列に実行することができます。 –

+0

これはhttp://serverfault.com/の詳細な質問です。 –

答えて

2

これは非常に複雑な質問です。計算を効果的に並列化できるアプリケーションは、複数のコアを使用できる必要があり、使用する必要があります。

bashについて考えてみましょう。これは、一連の操作を実行します。それぞれの操作は前の操作の結果に依存します。このようなシナリオでは、いくつかの計算を他のコアに移動することは非常に難しく、新しいタスクを開始し、同期(その結果を待つ)が複数のコアで実行される利点を上回るため、また、深い依存関係分析を行う必要があります。これは単なる余分な作業です。

sendfileのシステムコールに依存している優れた実装はほとんど仕事をせず、1つのスレッドから多くのクライアントにサービスを提供できるため、ファイルを送信するなどの単純なWebサーバータスクは複数のコアなしでもうまくいく可能性があります。

次に、他にも多くの問題がありますが、タスクは簡単に/簡単に並列化できます。タスク間の依存関係はほとんどなく、サーバは他のクライアントとの相互作用の知られていない独立した各クライアントと通信することができます。チャットボットを書く場合、各スレッドはコア(またはコアの一部)を利用して、その1つのクライアントと通信できます。テレビ放送用のビデオストリームエンコーダをお持ちの場合は、各チャンネルに1つ以上のコアを使用し、CPU全体の限界に達するまでカップルエンコーダを作成することができます。動的に生成されるWebサイトのほとんどはこのカテゴリに属します.Webサーバーは、一度に1つのクライアントにサービスを提供するPHP/Python/Rubyの「モジュール」の多くのインスタンスを実行できます。

問題もありますが、これらはタスク間の多くの計算といくつかのディスクI/Oに依存しますが、それほど多くはありません。アプリケーションの中にはコアを利用しているものもありますが、コードの動作についてマルチスレッドのコードや理由を書くのは難しいため、理論的に可能なものよりも並列性が低いことがよくあります。結局のところ、誰かがそのコードを書いて維持し、常に新しい機能を追加する必要があります。

+1

良い答え。さらに、2つの無関係なプロセスが同時に実行されるという問題があります。例えば。同じマシンにDBとApp Serverを持っていれば、通常はシングルスレッドの場合でもそれぞれコアを使用できます。単一のコアマシンでは、コンテキストスワップを待たなければなりません。だから、シングルスレッドのソフトウェアであっても、多くの場合、複数のコアから本当の利益を得ることができます。 – Karl

0

です。

マルチプロセスまたはマルチスレッドのWebアプリケーションサーバーには、確かに多くのコアを使用する能力があります。実行するかどうかは、アプリケーションの構築方法と作業負荷によって異なります。

各PHPページはシングルスレッドであり、通常は独自のプロセスで動作しますが、複数のページインスタンスを一度に実行でき、すべてのコア(またはそれらのうちの少なくとも一部)すべてのコアが完全に使用されていると忙しいと聞こえます)!

しかし、一般的なリソースと競合する可能性があるため、セッションロックを使用したり、粗いロックや共通のデータベースにアクセスするなど、常にそのように機能するとは限りませんしたがって、機械の全能力を使用することはできない。

IOなどのCPU以外のリソースと競合する可能性もあります。

または、CPUを完全に使用するのに十分なインスタンスを実行するのに十分なメモリがない可能性があります。

関連する問題