私は.NET4.0のParallelライブラリをいじくり回してきました。最近、私は、大規模システムの1つが使用しなければならないいくつかの異常な読み取り/書き込み操作用のカスタムORMを開発しました。これにより、オブジェクトを属性で装飾し、データベースからプルする必要のある列と、書き込み時に出力する必要のあるXMLを反映して把握することができます。
このラッパーは多くのプロジェクトで再利用されることを想定しているので、できるだけスピードを絞りたいと思います。このライブラリは、主に.NETWebアプリケーションで使用されます。使い捨てのコンソールアプリケーションを使用してフレームワークをテストし、作成したクラスを調べています。
マルチスレッドに伴うオーバーヘッドの教訓を学びました。マルチスレッドを使用すると、実行速度が低下します。読んでみると、長い間やっている人には直感的に思えますが、実際には直感に反しています。メソッドを同時に30回実行すると、連続して30回実行するよりも遅くなる可能性があります。 ?
複数のスレッドが同じ共有オブジェクトをめぐって争わなければならないことで問題が発生しているとは思わないので(まだはっきりとはわかりませんが)、速度低下はオーバーヘッドから来ていると思いますそれらすべてのスレッドを生成し、ランタイムがそれらをすべてまっすぐに保ちます。それで:
- 私は主に学習演習としてやっていますが、これは悲観的なことですか?些細な非IOタスクの場合、マルチスレッドはやり過ぎですか?私の主な目標は速度であり、UIなどの応答性ではありません。
- IISで同じマルチスレッドコードを実行すると、スレッドプールにスレッドがすでに作成されているため、速度が向上しますが、現在、コンソールアプリを使用しています。これは、別の方法で指示するまでシングルスレッドであると想定しています。私はいくつかのテストを実行しようとしていますが、なぜそれが何らかの方法になるのかを知るために私が見逃しているいくつかの基本的な知識があると思います。私のコンソールアプリも2つのコアを備えたデスクトップで実行されていますが、Webアプリのサーバーにはそれ以上のコアがあるため、それを変数としても使用する必要があるかもしれません。