『Javaの理論と実践: (若干) シンプルになった並行性』のメモ

(若干) シンプルになった並行性

記事:Javaの理論と実践: (若干) シンプルになった並行性

メモ:

  • ロギング・スケジューリング・キャッシング系のパッケージは再発明されやすい
    • XML パーサ、XSLプロセッサー、PDF ジェネレータは再発明されないのに。。。
    • 「シンプルなのがほしい」という理由でプロジェクトごとに再発明される
    • 最終的には必要に応じてパッケージが大きくなり、サンクコストへの抵抗と移行コストから捨てるに捨てられなくなる
    • 最初からよりよいライブラリを使うことを考えよう
  • 平行性ビルディングブロックには util.concurrent を使おう
    • Doug Lea が作ったライブラリ。よく考慮され、よくテストされ、実績がある。
    • Java の primitive な wait()、notify() は低レイヤすぎて扱うのが難しい
    • ロッキング、キュー、タスクスケジュール。これらを primitive で実装するのはかなり難しい
  • 非同期タスクの実行
    • 単純な new Thread() + new Runnable() の実装だと問題がある
    • 問題点1:スレッドの生成・消滅のコスト
    • 問題点2:リソース管理がされてない(たくさんリクエストがくると死ぬ)
  • Executor インタフェース
    • ThreadedExecutor: さきほどのプログラムと同じ。=> ただし実装を取り替えるのが楽になる
    • QueuedExecutor: 単一のバックグラウンドスレッド。タスク間で同期化をとる必要がない
    • PooledExecutor: 高度な管理機能を持ったスレッドプール
  • FutureResult
    • 非同期タスクの実行プロセスへのハンドラ
    • 実行プロセスは Executor で実行できる
  • java.util.concurrent を使おう

感想

ここらへんの話題に関しては、大人しく『Java並行処理プログラミング』読めばいいって感じだなー。

読んだの数年前でけっこう忘れてるのでもう一回読もうかな。

Java並行処理プログラミング ―その「基盤」と「最新API」を究める―

Java並行処理プログラミング ―その「基盤」と「最新API」を究める―