New I/Oについてのメモ
いろいろと調査中。とりあえずのメモ。詳しいことは後日書く予定
- 既存java.ioパッケージの補完
- プリミティブ型のバッファ郡を定義
- ヒープ外のメモリをアロケート可能(アロケートのコストは高い)
- ノンブロッキングI/Oのためのインターフェースがある(マルチプレクサ)
- シングルスレッドでも多重I/Oを効率的に処理できる。
基本構成要素
- Channel
- Buffer
文脈
Channelで外部リソース(ソケット、ファイル等)に接続し、Bufferへのリード、Bufferから外部リソースへのWriteをおこなう。
-
- 外部リソースからread=Bufferへのput
- 外部リソースへのwrite=Bufferからのget
ノンブロッキングI/Oの構成要素
- SelectableChannel
- Selector(マルチプレクサ)
- SelectKey
文脈
SelectableChannelをSelectorに登録。Selectorは準備ができた(ブロッキングせず処理可能な)IO処理を選択(選択操作自体はブロッキングされる)し、SelectKeyとして返す。SelectKeyからSelectableChannelを取り出しI/O処理(ブロッキングされない)を行う。必要であればSelectorに続きの処理を登録。処理の必要がなくなればSelectorから削除。
疑問
java.util.concurrentとか、最新のロック機構を使うマルチスレッド実装とシングルスレッドでマルチプレクサをつかった多重化とどちらの効率が高いのか?