java的非阻塞的NIO通讯方式了解下。。。
1. 有一个专门的线程来处理所有的 IO 事件,接收并负责分发。
2. 事件驱动机制:通讯事件到的时候触发,而不是同步的去监视事件。
3. 线程通讯:线程之间通过 wait,notify 等方式通讯。保证每次上下文切换都是有意义的。减少无谓的线程切换。
服务端和客户端各自维护一个管理通道的对象,我们称之为selector,该对象能检测一个或多个通道 (channel) 上的事件。
我们以服务端为例,如果服务端的selector上注册了读事件,某时刻客户端给服务端发送了一些数据,阻塞I/O这时会调用read()方法阻塞地读取数据,而NIO的服务端会在selector中添加一个读事件。服务端的处理线程会轮询地访问selector,如果访问selector时发现有感兴趣的事件到达,则处理这些事件,如果没有感兴趣的事件到达,则处理线程会一直阻塞直到感兴趣的事件到达为止
在应用中,一般会使用多线程,一个线程专门负责监听客户端的连接请求,以阻塞方式进行,另一个线程专门处理请求,这个处理请求的线程真正采用NIO的方式