Java NIO Fundamentals

来源:互联网 发布:php exec w3c 编辑:程序博客网 时间:2024/06/05 19:25

Basic Concepts

1. Channel & Buffer: data is always read from channel to buffer, or writtern from buffer to channel

2. Non-blocking IO: non-blocking while read and write data

3. Selector: A single thread monitor multiple channels for data

http://tutorials.jenkov.com/java-nio/index.html


Channel & Buffer


Selector

Single thread using just one selector can handle many connections open (channels), but low traffic on each connection (why low traffic?)

1. POSA2 Selector Pattern

2. Why should low traffic is assumption of channel is low traffic?

3. What is better way to handle the heavy traffic application?

4. Is channel also at the same thread of selector?


To use a selector, register a channel with it



Channels

1. FileChannel <=> Files

2. DatagramChannel <=> UDP

3. SocketChannel <=> TCP

4. ServerSocketChannel, listen for incoming TCP connections, like a web server. For each connection, a SocketChannel is created


Buffer

Four steps using buffer:

1. Write data into buffer

2. Call buffer.flip()  // filp switch from writting mode to reading modepos

3. Read data out of buffer

4. Call buffer.clear() or buffer.compact() // once all data have read all the data, need to clear the buffer, to make it ready for writing again



capacity & position & limit

capacity: the fixed memory block for buffer

position and limit are depends on which mode (the writing mode or reading mode?)



References:

http://tutorials.jenkov.com/java-nio/non-blocking-server.html#non-blocking-server-github-repository

http://www.drdobbs.com/jvm/high-performance-io-with-java-nio/184406242

0 0