chapter19 Future和Promise
来源:互联网 发布:java nanotime 转换 编辑:程序博客网 时间:2024/05/17 02:36
- chapter19 Future和Promise
- Future功能
- Promise功能介绍
chapter19 Future和Promise
1. Future功能
Netty的Future都是与异步IO操作相关的,因此命名为ChannelFuture,代表其与Channel操作相关
ChannelFuture两种状态:
- uncompleted和completed
- 当开始一个IO操作时,一个新的ChannelFuture被创建,此时它处于uncompleted状态——非失败、非成功、非取消。一旦IO操作完成,将被设置成completed,其操作结果有三种可能:操作成功、 操作失败、操作被取消
- Netty强烈建议直接通过添加监听器的方式[GenericFutureListener接口]获取IO操作结果,或者进行后续的相关操作
- 当IO操作完成之后,IO线程会回调ChannelFuture中GenericFutureListener的operationComplete方法,并把ChannelFuture对象当作方法的入参。如果用户需要做上下文相关的操作,需要将上下文信息保存到对应的ChannelFuture中。
推荐通过GenericFutureListener代替ChannelFuture的get等方法的原因:
- 当进行异步IO操作时,完成的时间无法预测的,如果不设置超时时间,会导致调用线程长时间被阻塞,甚至挂死。而设置超时时间,时间又无法精确预测。利用异步通知机制回调是最佳的解决方案,性能也最优。
需要注意:不能在ChannelHandler中调用ChannelFuture的await()方法,会导致死锁。原因是发起IO操作之后,由IO线程负责异步通知发起IO操作的用户线程,如果IO线程和用户线程是同一个线程,就会导致IO线程等待自己通知操作完成,就会导致死锁。
异步IO操作有两类超时:一个是TCP层面,一个是业务逻辑层面。通常情况下业务逻辑超时时间应该大于IO超时时间,两者应该是包含关系。
- ChannleFuture超时并不代表着IO超时,意味着ChannelFuture超时,如果没有关闭连接资源,随后连接依旧可能会成功,会导致严重问题。
2. Promise功能介绍
- Promise是可写的Future,Future自身并没有写操作相关的接口,Netty通过Promise对Future进行扩展,用于设置IO操作的结果。
- Netty发起IO操作的时候,会创建一个新的Promise对象
阅读全文
0 0
- chapter19 Future和Promise
- 实战中的 Promise 和 Future
- Chapter19 线程和同步
- 并发编程 Promise, Future 和 Callback
- netty5.0之Future和Promise
- 并发编程 Promise, Future 和 Callback
- 并发编程 Promise, Future 和 Callback
- 第19章 Future和Promise
- [转]并发编程 Promise, Future 和 Callback
- Netty5源码分析(七) -- 异步执行Future和Promise
- Netty 学习 - 异步操作中的Future和Promise
- C++11之std--future和std--promise
- C++11之std--future和std--promise
- C++11之std--future和std--promise
- C++11之std--future和std--promise
- C++11之std--future和std--promise
- C++11之std--future和std--promise
- C++11之std--future和std--promise
- open函数的一些注意点及r,r+,w,w+,a,a+的区别
- VirtualBox-5.1.30.18389-Win安装包分享 百度云
- axios的一些常见用法
- 一个项目结尾:事务
- MySQL事务
- chapter19 Future和Promise
- Angular1中数据请求$http服务的正确使用姿势
- 在ubuntu上,绑定usb串口的几种方式(udev)
- git删除远端仓库文件方法及常用指令
- 51nod 1693 水群(spfa最短路)
- 抽象类
- 关于MySQL的字段类型为timestamp的坑
- linux基本命令
- Java Web入门Demo