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

[jfriends-ml 10937] Re: Doug Lea 本



高橋(徹)です。

# 教育でのソフトウェア開発実習と実際のソフトウェア開発の最大の違いは
# 朝定時で始まること。帰りは終電/終バスに制約されるのであまり変わらず。

   "The Murayama <locutus@xxxxxxxxxxxxxxxx>"さんは書きました:
> 「マルチスレッド」ならば不要かもしれませんが,「並列処理」は高速化技術
> なので,実行性能を意識しないわけにはいかないんです.
やはり、ここで前提がずれているんですね。
Doug Lea本が「高速化技術」の本と思っていなかったです。「高速化技術」に
ついて期待してDoug Lea本を読んでも期待にそえないと思われます。また、
Javaのスレッド機構も高速化に主眼はおかれていないと思われます。

"Concurrent"は言葉の範囲が広そうなので、高速化技術を前提とするならば
やはり"Parallel"の言葉を使う方がよいのではないでしょうか?
日本語訳はどちらも「並列」になってしまうのでしょうか? そうだとすると
混乱の原因は日本語訳の問題かもしれません。原題のConcurrentについては、
並列を高速化技術として取り扱うコミュニティにおいては高速化技術とイコー
ルの意味を持つかもしれませんが、別なコミュニティにおいてはまた別な意味
を持つでしょう(「マルチスレッド」の意)。

> それこそ,double-cheked-lockingイディオムなんて,なんらかのテストでバグを
> 表面化させるのは事実上不可能です.そこにどういうバグがあるか分かっている
> にも関わらず,バグを表面化させることさえ不可能なんです.ましてバグがどこに
> あって,それがどんなバグか分からない時にはテストしようがありません.
結局のところ、枯れたイディオムやパターンに頼ることになるのでは。
証明できる技術がない以上、経験から得らえた枯れた手法に頼るしかないかと。

> > 「Javaスレッドプログラミング」で抜けている重要な部分や、間違っている部
> だいたい示したつもりなんですが.
> 
> 何よりも「並列処理が高速化技術だ」ってことさえも,明示されてなかったのでは?
これは、「Javaスレッドプログラミング」はConcurrent Programmingを扱うと
副題についている。Concurrentという語には、処理をより自然に記述できるマ
ルチスレッド・プログラミングの意味と、並列処理による高速化技術の意味が
含まれる。しかし、同書には高速化技術の部分が大きく抜けている。
ということに過ぎないのではないでしょうか?

> > 書籍にも、リスト構造における同期の例が確か載っていました。
> 
> 例えば,HashtableとConcurrentHashMapのような感じですか?
2.2.3のトラバーサルにおいて、アグリゲートオペレーション、インデックス
によるトラバーサル、バージョンイテレータについて述べられています。
2.4.4.1に内部的なコピーオンライト、2.5.1.4のブロック化されないロック、
といったところだったと思います。
内容はやっぱり難しく、読み返せない状態です。

--
TAKAHASHI Toru
torutk@xxxxxxxxxxxx