Netty异步任务模型!
Netty异步任务模型!
月伴飞鱼Netty 中的 I/O 操作 是 异步 的,包括 Bind、Write、Connect 等操作会简单的返回一个
ChannelFuture
。调用者并不能立刻获得结果,而是通过
Future-Listener
机制。
- 用户可以方便的 主动获取 或者通过 通知机制 获得 IO 操作结果。
Netty 的异步模型是建立在 future 和 callback 的之上的。
- callback 就是回调。
Future的核心思想是:
假设一个方法 fun,计算过程可能非常耗时,等待 fun返回显然不合适。
那么可以在调用 fun 的时候,立马返回一个 Future
- 后续可以通过Future去监控方法 fun 的处理过程(即
Future-Listener
机制)
常见操作
通过 isDone 方法来判断当前操作是否完成(注意不是判断完成成功)
通过 isSuccess 方法来判断已完成的当前操作是否成功
通过 getCause 方法来获取已完成的当前操作失败的原因
通过 isCancelled 方法来判断已完成的当前操作是否被取消
通过 addListener 方法来注册监听器
- 当操作已完成(isDone 方法返回完成),将会通知指定的监听器
- 如果 Future 对象已完成,则通知指定的监听器。
Future Listener 机制
当 Future 对象刚刚创建时,处于非完成状态
- 调用者可以通过返回的
ChannelFuture
来获取操作执行的状态,注册监听函数来执行完成后的操作
。
案例说明
绑定端口是异步操作,当绑定操作处理完,将会调用相应的监听器处理逻辑
1 | // 3.绑定端口并且同步,生成一个 ChannelFuture 对象 |
相比传统阻塞 I/O,执行 I/O 操作后线程会被阻塞住,直到操作完成
异步处理的好处是不会造成线程阻塞
- 线程在 I/O 操作期间可以执行别的程序,在高并发情形下会更稳定和更高的吞吐量。