[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends-ml 10888] 「はじめての並 列プログラミング」とマ ルチスレッド



村山@NETGENEです.

あれから並列プログラミングについて色々と調べていましたが,
なかなかいい参考書はないようです.

「はじめての並列プログラミング」も並列プログラムの世界を知るには
悪くないんですが,Javaと比べると少々世界が違いすぎる.「はじめての〜」
とJavaとはアセンブラとC言語くらいに違います.興味があるなら読んでみる
のもいいですが,残念ながらあまり参考にならないでしょう.

で,結局,現時点では並列プログラミング初心者は次の三つくらいに目を通して
おくのが無難じゃないかなと思ってます.

-----
○「Javaの理論と実践: 並行コレクション・クラス」
http://www-6.ibm.com/jp/developerworks/java/031114/j_j-jtp07233.html

ConcurrentHashMapの概要.

○"Java theory and practice: Building a better HashMap"
http://www-106.ibm.com/developerworks/java/library/j-jtp08223/

ConcurrentHashMapの実装について.上の記事の続編.日本語訳はまだ出て
ないけど,多分近いうちに出るんじゃないかと思います.

あくまでConcurrentHashMapの実装の解説ですが,並列プログラミングの
エッセンスが詰っている感じです.並列プログラミング初心者ならば
目を通す価値はあるでしょう.

ある程度並列プログラミングの経験がある人は,CocurrentHashMapの様な設計に
するか,或いはHashMapのように非同期にするかのどちらかを選択するでしょう.
VectorやHashTableのような強引な同期を取るのはお世辞にも好ましいものでは
ありません.HashTableとConcurrentHashMapの設計の違いは,(或いはこの違い
こそが,)逐次プログラミングと並列プログラミングの違いと言っても良いくらいです.

○「コンピュータアーキテクチャ」
いわゆるヘネシー&パターソン.

これのキャッシュコヒーレンシープロトコルの部分.
"snooping"と"write invalidate"辺りが中心.
(Cache Coherency Protocol,キャッシュの一貫性を維持する仕組み.
 synchronizedやvolatileを実現するための仕組みと考えてよい.)

あくまでマルチプロセッサを実現するハードウエアについての解説ですが,
この仕掛けが分かってないと,なぜ同期を避けなければならないのか,
その理由がイマイチ実感できないでしょう.

内容は3rd Editionでも基本は大差ないようですけれど,実は章立ての方は
大きく変わってます.パイプラインがAppendixに移動し,マルチプロセッサ/
クラスタリング等が独立した章になっています.

----------------

これ以外となると,あとはJSR133,Java Memory Model(JMM)関連ですかね....
資料は全部英語ですけど.
#http://www.cs.umd.edu/~pugh/java/memoryModel/

現在のJMMやマルチスレッド関連の完成度は,Java全般からするとかなり低い方にあると
思います.今にして思えばそれも当然ですね.並列プログラミング自体がまだまだ
研究段階で,広く普通のプログラマーが使うようになったのはJavaが普及した後なん
ですから.Java以外の言語では,並列/マルチスレッドプログラミングなんて,普通の
プログラマーが扱うようなもんじゃありませんでした.ほとんど,いまでいう
アセンブラやJNIの感覚です.(^^;

-------------------
ところで,オライリーの"Java Threads, Second Edition".
amazon.comの方で酷評されてますねえ....

他の本も似たようなものらしい.

マルチスレッドの参考書で良いのがないのは,米国でも同じなんですかね.
やっぱDoug Lea本しかないかな?