5

たとえば、16コアと32Gメモリを搭載したサーバーがあります。apache新しい接続ごとに新しいスレッドを生成する のようなプロセスの場合、次の代替案のどれが優れていますか?またその理由は? また、 のようなアプリケーションの場合はどうなりますかcassandra。メモリへの書き込みが多い cassandra の場合、これは、同じマシンに 2 つの「ノード」を配置することが何らかの形で有益であることを意味しますか?

  1. 同じマシン上で実行され、2 つの異なるポートでサービスを提供する、同じアプリケーションの複数 (たとえば 2 つ) のインスタンス。(このマシンの前にある別のマシンの LB である可能性があります)。

    OS がマルチスレッド アプリケーションの 2 つのインスタンスをどのように処理するのか混乱しています。両方のプロセスで、すべてのコアでスレッドが実行されますか? (プロセスとスレッドの間で) コンテキストの切り替えが発生するのはどのような場合で、パフォーマンスにどのような影響がありますか?

  2. 1 つのポートでサービスを提供するマルチスレッド アプリケーションの 1 つのインスタンス。

スレッドが書き込み先の共有メモリを持つ cassandra のようなアプリケーションの場合、スレッド間でコンテキストの切り替えが発生するのはいつですか?

4

2 に答える 2

2

Windows コンテキスト (および Unix 上の AFAIK も) では、プロセスは実行スレッドの周りの単なる構造的コンテキスト (およびいくつかのメモリ保護も配置されています)です。つまり、コードを実行するものは単なるスレッドです。

プロセスは、同じプロセス内のスレッドほど簡単にメモリを共有することはできません。

ただし、コードを実行するのは常にスレッドです。

ここで、アプリケーションの 2 つのインスタンスが同じマシン上で実行され、マルチスレッドが利用可能な CPU コアを使用し、これらのコアをそれらの間で共有する必要があります。アプリケーションのスレッドの総数よりも多くのコアがある場合は、幸運です。つまり、別の場所を作るためにコンテキストを切り替える必要なく、すべてのスレッドを実行できるからです。ただし、それは理論上です。実際には、OS はコアで実行されている特定のスレッドの時間を他のスレッド (アプリケーションのスレッドでさえない可能性があります) と共有する必要があるため、各スレッドには、切り替えられる前に実行できる特定のタイム スライス (量) があります。 .

OS スレッド スケジューラがこれを制御します。

したがって、パフォーマンスは、実行中のスレッドの数、使用可能なコアの数、およびこれらのスレッドの実行内容に依存します。それらがコア上で実行できると仮定すると、物事は高速になる可能性があります. しかし、それはめったにないケースであり、スレッドは待機、ブロックなどを必要とする場合があります。

2 つのインスタンスまたは 1 つのインスタンスをマルチスレッドで実行しても、2 つのインスタンスを実行する場合にコアよりも多くのスレッドがある場合にのみ、実際の違いが生じると思います。

また、IO の要因もあります。これは、CPU やスレッドに依存するのではなく、ハードディスクの遅延と RAM の遅延に依存します。多くのスレッドがほとんどの時間を IO の待機に費やしている場合、アプリケーションの 1 つまたは 2 つのインスタンスを実行しても大きな違いはありません。

ただし、これはパフォーマンスとスレッド化であり、測定しない限り正確な予測を行うことは非常に困難です。

于 2012-10-03T12:06:08.777 に答える
1

同じマシンで実行されている同じアプリケーションの複数のインスタンスには、プロセス間同期が必要です。プロセス間の同期の量が少ない場合、このアプローチは有益です。また、アプリケーションがそれ自体でマルチスレッド化されている場合、必要なプロセスは 1 つだけです。アプリケーションがシングルスレッドの場合、複数のインスタンス (CPU ごとに 1 つのプロセスなど) を実行して、ハードウェア リソースを利用したい場合があります。

プロセスが IO バウンドの場合、スループットは CPU によって制限されず、1 つのスレッドがすべての IO 要求に対応できます。

スレッドが書き込み先の共有メモリを持つ cassandra のようなアプリケーションの場合、スレッド間でコンテキストの切り替えが発生するのはいつですか?

2 つ以上のスレッドが共有メモリに書き込みを同期しようとすると、コンテキストの切り替えが発生します。

于 2012-10-03T12:03:16.673 に答える