マルチコアとスレッド数

マルチコア時代だからこれからは、業務システムでも並列処理をしないと駄目ってな意見を見ると思うのはー
「どこで並列処理をつかうの?」
という素朴な疑問だったりします。
並行処理と並列処理を区別せずに表現している場合は、並行処理ならば、まだわかります。
ライブラリの進化で並行処理の扱いが簡単になり、「本当は並行処理させたほうがいいんだけど、そこまで力を入れる必要がない」ってな理由で使わなかった部分での採用が進むってな話は理解できます。
この辺、楽に使えるならカラフルなボタンを採用して見栄えをよくしたいってな話に近いものがあるかもしれませんねぇ。


・・・で、並行処理ならばコア数なんて意識する必要性はほとんどないでしょ?
並行に処理したいってのが最大の理由で採用しているのですから、コアが1つだろうが2つだろうが関係ないわけです。
そりゃー並行に動いている以上のコアがあればパフォーマンスは良くなりますが・・・
その逆、つまりコアがN個だからN並行にしようってのは順番がおかしいというか、並行に動作する数に自由度がある時点で別の発想になるのではないかと。
例えばサーバーで複数のユーザーを同時に処理したい場合、コア数に合わせて最大同時処理数を制限することは可能だと思います。
・・・が本当にそんな制限かけるのか?って話になると微妙じゃないかなと。


コア数を意識するのは、並列処理になりますね。
並列処理は、コアが2つ以上あってはじめて価値が生まれます。
で、このときスレッド数をどれぐらい意識するかというと・・・あまり意識しなくてもいいというか意識しても意味がないと思うのですよ。
N並列だと設計したら、コア数はN個以上ないと駄目なわけです。
コア数なんてものはハード依存するのですから、ハードを決めうちする以外、設計時にNという数は決められない。
また、コアがN個存在していたとしても、実行時に全てのコアが空いているかどうかもわかりません。
実行中に別のプログラムが起動することでコアの状況なんて簡単に変動します。


つまり・・・いくら考えても最適なスレッド数なんて決定できないわけです。
搭載されているコア数全てを使えるものだと仮定して、スレッド数を自動設定するものが多いんじゃないかなぁ?
もしくは手動でスレッド数を指定できるようなものですね。


話を業務システムに戻すと、並列処理させてお得なとこってどこですかね。
サーバーは同時処理しないといけないことが多いだろうから、並行処理が前提で、コア数依存する並列処理はパフォーマンスを発揮しにくいのではないかと思います。
スレッドプールの上限として考えても現在のコア数では少なすぎるかなと。


じゃークライアントはどうかと考えるとー
単独で動作するクライアントなら自由に使えるので並列処理の出番はありそうですが、業務システムで単独動作が多いかというと・・・少ないんじゃないですかね?
また、排他処理の関係などから並列処理できる部分も限定されると思うのです。
そんなことを考えるなら各種エンジン(データベースとかフレームワークとか)が並列処理を担当し、プログラムのほうは並行処理に専念したほうが、効果的のように思えます。


どこか1つが並列処理を前提としているのなら、他の部分はそれを邪魔することしかできないんですよねぇ(^^;