Monthly Archives: 12月 2010

「Java並行処理プログラミング」第29回(12月28日)

参加者 今井(読み手)、沼田(記)
範囲 pp. 318 – 333

第IV部 高度な話題

第13章 明示的なロック

  • 13-3 公平性(fairness)
    • p.318 最後の行の「公平性のペナルティはほぼ2倍です」とは、何をどう比較して2倍といっている?
  • 13-4 synchronizedとReentrantLockの使い分け
  • 13-5 リードライトロック
  • ●まとめ

第14章 カスタムシンクロナイザを構築する

  • 14-1 ステート依存を管理する
    • 14-1-1 例:事前条件の失敗を呼び出し側に広める
    • 14-1-2 例:ポーリングと休眠による荒削りなブロッキング
      • †3 Grampy→Grumpy

「Java並行処理プログラミング」第28回(12月21日)

Posted on by 0 comment

参加者 沼田(読み手)、今井(記)
範囲 pp. 309 – 317

第IV部 高度な話題

第13章 明示的なロック

  • 13-1 LockとReentrantLock
    • 13-1-1 ポーリングによる入手と時間制限付きの入手
    • 13-1-2 実行性能への配慮
      • p.315 本文下からl.5
        ふつのtry/finallyによる → ふつうのtry/finallyによる

「Java並行処理プログラミング」第27回(12月17日)

参加者 今井(読み手)、沼田(記)
範囲 pp. 294 – 307

第III部 生存、実行性能、試験

第12章 並行プログラムを試験する

  • 12-2 実行性能を試験する
    • 12-2-2 複数のアルゴリズムを比較する
    • 12-2-3 応答性を計測する
  • 12-3 試験の落とし穴を避ける
    • 12-3-1 ガーベッジコレクション
    • 12-3-2 動的コンパイル
      • 下から5行目の「Fig.12-4」は「Fig.12-5」の誤り
    • 12-3-3 コードパスの非現実的な拾い方
    • 12-3-4 争奪の非現実的な激度
    • 12-3-5 デッドコードの排除
  • 12-4 試験を補完するテクニック
    • 12-4-1 コードレビュー
    • 12-4-2 静的分析ツール
    • 12-4-3 アスペクト指向の試験テクニック
    • 12-4-4 プロファイラと監視ツール
  • ●まとめ

「Java並行処理プログラミング」第26回(12月14日)

Posted on by 0 comment

参加者 沼田(読み手)、今井(記)
範囲 pp. 287 – 294

第12章 並行プログラムを試験する

  • 12-1 正しさを試験する
    • 12-1-4 資源管理を試験する
    • 12-1-5 コールバックを使う
      • p.289 List 12-9
        二つ目のfor文のループ回数(20)は何のため?
        threadFactory.numCreated.get() < MAX_SIZE の条件だけでは、MAX_SIZEを超えるバグは捕らえられるが、MAX_SIZEを下回るバグが捕らえられない。ある程度待ってMAX_SIZEにいたらなかったら失敗とするためだと思う。20は適当な値だろう。
        ループにせずに単に2秒(20 * 100 msec.) sleepするだけでも良いと思うが、バグが無かったときに無駄に待ち時間があるから100 msec.毎に確認していうるのだろう。
    • 12-1-6 スレッドの交替を頻繁にする
  • 12-2 実行性能を試験する
    • 12-2-1 PutTakeTestを拡張して計時機能を加える
      • p.292 List 12-12
        Throughputの意味が一般的な意味と違う。通常、Throughputは単位時間当たりの処理数。List 12-12のSystem.out.print()で表示している値は、1 item当たりの処理時間。
      • p.292 下から6行目、p.293 List 12-3
        TimedPutTakeTestクラスの定義が本書にない。
        → 正誤表には特にに載っていませんでしたが、原書のサポートページの”view code examples”内、12.12 Testing with a barrier-based timer. にあります。

「Java並行処理プログラミング」第25回(12月10日)

参加者 今井(読み手)、沼田(記)
範囲 pp. 274– 287

第III部 生存、実行性能、試験

第11章 実行性能とスケーラビリティ

  • 11-6 コンテキストスイッチのオーバーヘッドを減らす
  • ●まとめ

第12章 並行プログラムを試験する

  • Heisenbugs:以下、Wikipedia 特異なバグハイゼンバグの項より。
    ハイゼンバグは、それを調査しようとすると変貌したり消えたりするバグである。
    よくある例としては、リリース版では発生するがデバッグ環境では再現できないものや、競合状態によって発生するものがある。この名前は不確定性原理を提唱したハイゼンベルクのもじり。
  • 12-1 正しさを試験する
    • 12-1-1 基本ユニットテスト
    • 12-1-2 ブロックする操作を試験する
    • 12-1-3 安全性を試験する
      • あるコンシューマが正しい順で処理をするかは見ない?

「Java並行処理プログラミング」第24回(12月7日)

Posted on by 0 comment

参加者 沼田(読み手)、今井(記)
範囲 pp. 266 – 274

第11章 実行性能とスケーラビリティ

  • 11-4 ロックの争奪を減らす
    • 11-4-2 ロックの粒度を小さくする
    • 11-4-3 ロックストライピング(縞々ロック)
      • p.268 List 11-8 l.3
        locks[i] = new Object();
        以前、「Javaの鉄則」に、ロックオブジェクトは長さ0のbyte配列がオブジェクト作成コストが低くてよいとあった。今のJVMではあまり気にしなくて良いのか。
    • 11-4-4 ホットフィールドを避ける
    • 11-4-5 排他的ロックに代わるもの
    • 11-4-6 CPUの稼働率を監視する
      • p.270 I/O束縛
        ディスク束縛はiostatのどこで判定するのだろう? %iowaitかと思ったが、Fig.11-4ではtps, Blk_read/s Blk_wrtn/s に説明がつけてあるので、これらの絶対量をみるのだろうか。
    • 11-4-7 オブジェクトプールはノー!
  • 11-5 例:Mapの実行性能を比較する

「Java並行処理プログラミング」第23回(12月3日)

Posted on by 0 comment

参加者 今井(読み手)、沼田(記)
範囲 pp. 253– 264

第III部 生存、実行性能、試験

  • 11-2 アムダールの法則
    • 11-2-1 例:フレームワークに隠れている直列化
    • 11-2-2 アムダールの法則を定性的に適用する
  • 11-3 スレッドがもたらす費用
    • 11-3-1 コンテキストスイッチ
    • 11-3-2 メモリの同期化
    • 11-3-3 ブロッキング
  • 11-4 ロックの争奪を減らす
    • 11-4-1 ロックのスコープを狭める(“入ったらすぐ出ろ”)