# re: Java NIO trick and trap 回复 更多评论
2010-11-24 16:32 by
首先感谢大侠分享。粗略看了一遍,有两个问题要请教一下:
1)Reactor数目 一节中提到 Netty 的 Reactor 数目为:1 + 2 * CPU,但是我从 Netty 代码中找不到相关的论证,或许是我搞错了,希望作者能帮我核实一下;
2)SO_TCPNODELAY 选项开启之后,小的数据会延迟发送,导致网络数据传输延时特别大,我在开发中得到的延时是 40 ms,我一度以为是 JDK 的 bug,我在网上也看到有人反映这个问题,如果作者觉得有必要可以把这个也列为一个 TRAP。
# re: Java NIO trick and trap 回复 更多评论
2010-11-24 18:38 by
@simaliu
1、查看NioServerSocketChannelFactory类的构造函数,SelectorUtil.DEFAULT_IO_THREADS常量。
2、这个我不认为是nio的trap,而是网络编程需要注意的问题,感谢你的分享。
# re: Java NIO trick and trap 回复 更多评论
2010-11-25 10:13 by
@simaliu
1 + 2 * CPU
这个参数在garbage里面非常常用。呵呵
# re: Java NIO trick and trap 回复 更多评论
2011-06-29 10:51 by
我是初学java nio的,有个问题请教一下lz
在减少wakeup调用那一章,也就是35页
为了性能考虑,当queue为空时,为什么把要写入的数据加入到queue中,而不是直接write??如果write不完在考虑加入到queue中,然后注册事件,最后wakeup
通常情况下write是写入到tcp的缓冲区,那一块好歹有个4-8k(根据不同的操作系统设置可能会有不同),通常是能成功的
以上实际是我在做c开发时候的一点经验,不知道转移到java之后是否继续有价值,肯定lz斧正,感谢。
# re: Java NIO trick and trap 回复 更多评论
2011-12-13 18:57 by
这篇ppt太好了,我这段时间一直在看xmemcached.yan4j的代码,正在为有些细节头疼,这份ppt刚好把我的疑问解决了,例如:
1、为什么新写Buffer实现
2、AtomicBoolean wakeup来减少Selector.wakeup调用(弱弱的问,Selector.wakeup如果多次调用,只有一次起作用,底层实现有个boolean变量来做记录操作状态,代码中AtomicBoolean wakeup也是用作记录操作状态,会不会多余?)
3、注册Channel和更新interest 通过if(isReactorThread())来决定是否放入队列的原因
4、各种socket参数的优化
5、网络延迟状态下通过临时Selector写数据(grizzly)的方式
……
# re: Java NIO trick and trap 回复 更多评论
2011-12-13 18:59 by
楼主的大量细节优化是yanf4j与mina比对测试胜出的根本原因吧,多谢你的分析
# re: Java NIO trick and trap 回复 更多评论
2014-01-07 16:35 by
自己本来想给团队分享一下nio的,看了dennis的ppt后,发现自己准备的太浅了。