スレッド並列 or ネットワーク並列 ?
スレッド並列
一つの処理をタスクに分割し、相互依存のない処理を複数スレッドに
分散し、処理を行い、最後に処理結果を纏める。
処理を依頼するスレッドと依頼された処理を行うスレッドに分かれる。
CPUのコア数によってスケールする。
JavaではJava7で導入されるConcurrency Utilitiesのfork/joinフレームワーク
によって容易に行えるようになる。
ネットワーク並列
一つの処理をタスクに分割し、相互依存のない処理を複数サーバに
分散し、処理を行い、最後に処理結果を纏める。
処理を依頼するサーバと依頼された処理を行うサーバに分かれる。
ネットワークを介するゆえのオーバーヘッドを考慮しておく必要がある。
サーバ数によってスケールする。
MapReduceによって注目されるようになった、複数サーバに処理対象の
データを分散配置する仕組みが必要。
ネットワーク並列とスレッド並列の優劣は一概にはいえない。
単一マシン構成ではスレッド並列、複数マシン構成ではスレッド並列
+ネットワーク並列を意識する時代が来ている。
数年前まではムーアの法則が有効で単一スレッドの性能が年々向上し
エンジニアはその恩恵を受けてきたが、数年前にムーアの法則は
破綻し、それ以来、単一スレッドの性能は頭打ちになっている。
エンジニアは単一スレッドでパフォーマンスチューニングを行い、
それで要件を満たさなければスレッド並列もしくはネットワーク並列
による処理時間短縮を指向していく必要がある。
[蛇足]
現状のCPUは複数の汎用コアを搭載する対称マルチコアとなっているが、
数年先にはCPUは特定の処理に特化したコアを組み合わせて搭載する
非対称マルチコアに移行する模様、それによって単一スレッドの性能が
向上するかは現時点では不明。
OS側でのスレッド並列対応は現在進行中。
アップルは MacOSX Snow Leopardでスレッド並列を意識した仕組み?
(コードネームGrand Central)を導入する予定、詳細は来月開催のWWDC
にて公開される。
M$のスレッド並列を意識した仕組みはまだ実験室レベル?。
おそらくWindows8?よりも前に.netの一部としてスレッド並列を
意識した何らかの仕組みが導入される、OSへの統合はWindows8?にて
行われると思われる。