質問

んのプロファイリングは、並行マルチスレッドプログラムの異なる番号を許可す。ここでのパフォーマンス実績とつの同じ入力します。

1 thread:
  Total thread time: 60 minutes.
  Total wall clock time: 60 minutes.

10 threads:
  Total thread time: 80 minutes. (Worked 33% longer)
  Total wall clock time: 18 minutes.  3.3 times speed up

20 threads
  Total thread time: 120 minutes. (Worked 100% longer)
  Total wall clock time: 12 minutes.  5 times speed up

のでありますのスレッドには時間が同じ仕事をしていて感じるのは、スレッドが必要に挑みます。

しかし、私の検討を柱(cpu、メモリ、diskIO、ネットワーク)の両方のアプリをデータベースサーバーです。メモリの他の主要先進国では資源の固定(以1G無料).CPUぼす30%70%、20日のスレッド試験、たっぷりあります。diskIOは実用的なアプリケーションに機械を、最小限のデータベースサーバーです。ネットワークは本当に素晴らしいです。

私もコールドとredgateや方法が見つかっていない待機中のロックを解除します。このスレッドを共にしない場合がございます。私はチェックをより繊細な品のようなデータベース接続の確立/プールした場合20のスレッドの試みに接続するには同じデータベースの、そして待機。).

ようにしている特定の資源争い、20日のスレッド実行のようになります:

20 threads
  Total thread time: 60 minutes. (Worked 0% longer)
  Total wall clock time: 6 minutes.  10 times speed up

何が最も可能性の高い資源以外のビッグ4るものなのかどうかに関して見なければ見ることで競?


をコードしている各スレッドを実行で約:

Run ~50 compiled LinqToSql queries
Run ILOG Rules
Call WCF Service which runs ~50 compiled LinqToSql queries, returns some data
Run more ILOG Rules
Call another WCF service which uses devexpress to render a pdf, returns as binary data
Store pdf to network
Use LinqToSql to update/insert. DTC is involved: multiple databases, one server.

は、WCFサービスを同一の機械が状態なしで複数の要求を同時に処理.


機械としては8つのcpuです。

役に立ちましたか?

解決

あなたが説明するのは、スレッドの増加とウォールロック時間の減少の間の1:1の関係である100%のスケーラビリティが必要だということです...これは通常の目標ですが、達成するのは困難です...

たとえば、1 GBの空き容量があるため、メモリの競合はないと記述します...これは私見では間違った仮定です...メモリの競合は、2つのスレッドがメモリを割り当てようとすると、一方がメモリを割り当てなければならない可能性があることも意味します他の人を待つ...覚えておくべき別のポニントは、すべてのスレッドを一時的にフリーズするGCによって発生する中断です... GCは構成(gcServer)を介して少しカスタマイズできます- http://blogs.msdn.com/b/clyon/archive/2004/09/08 /226981.aspx

もう1つのポイントは、呼び出されるWCFサービスです...スケールアップできない場合(PDFレンダリングなど)、それも競合の一形態です...

考えられる論争のリストは「無限」です...そしてあなたが言及した明白な領域に常にあるとは限りません...

編集-コメントによる:

確認すべき点:

他のヒント

合計スレッド時間を測定する代わりに、何らかのI / O(データベース、ディスク、ネットなど)を実行する各操作の時間を測定します。

これらの操作は、スレッドが多いほど時間がかかる操作であることがわかると思います。これは、競合がそのI / Oの反対側にあるためです。たとえば、データベースがデータの整合性を求めるリクエストをシリアル化している可能性があります。

ありが資源に対立を生んでいる。すべてのスレッドを読み取り/書き込みデータと同一のメモリバスは、同じRAMモジュールです。などのRAMは無料で事項を読み込み/書き込みが行われる同メモリー-コントローラーが同じモジュールをRAMのデータは同じです。

があればどのような同期 どこでも, それはあまりにも競合している資源です。だが--- 他の I/O、他の主要先進国では資源です。

または、N×高速時には1からNスレッド)。することはできませんので最終的には、 すべ のCPUである共有資源ることがあります士の対立を生んでいる。

あたっぷりの要因を防止しますが、フルリニア高速化.だと仮定すると、データベースに、サーバは、データベースにしないようにするには、ネットワークに接続してクライアントに、クライアントコンピュータのOSやドライバーの両端部には、メモリ-サブシステム、ディスクI/O すべ とができるしっかりと20倍ときに1から20ます。

二葉夢。

それぞれのボトルネックだけはまる数%であり、その全体の結果のようなものだなと思います。

ていらっしゃることだと思いますので戻るスケートよりも期待してはいけません。

でも、やが期待キャッシュのライン。いスレッドがアクセスデータのデータ使用その他のスレッド?わかき回ることを避けるために起こる?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top