庄周梦蝶

生活、程序、未来
   :: 首页 ::  ::  :: 聚合  :: 管理

Java NIO trick and trap

Posted on 2010-11-22 18:22 dennis 阅读(14266) 评论(19)  编辑  收藏 所属分类: javamy open-source

     上周在内部做的一个Java NIO框架的实现技巧和陷阱的分享,对编写NIO网络框架有兴趣的朋友可能有点帮助,上传slideshare.net一直出错,直接提供下载吧。
    
     下载地址:Nio Trick and Trap.pdf.zip






评论

# re: Java NIO trick and trap——编写高性能NIO网络框架  回复  更多评论   

2010-11-22 18:25 by jaedong
好东西,学习学习,谢谢.

# re: Java NIO trick and trap——编写高性能NIO网络框架  回复  更多评论   

2010-11-22 19:38 by 南哥
多谢分享

# re: Java NIO trick and trap——编写高性能NIO网络框架  回复  更多评论   

2010-11-22 19:52 by sky3380
长见识了,多谢分享~

# re: Java NIO trick and trap  回复  更多评论   

2010-11-23 15:38 by nada_forever
相当好,又学到不少东西,多谢多谢。

# re: Java NIO trick and trap  回复  更多评论   

2010-11-23 19:07 by alex_zheng
非常好,特别是对一些开源项目代码的解释

# re: Java NIO trick and trap  回复  更多评论   

2010-11-24 16:32 by simaliu
首先感谢大侠分享。粗略看了一遍,有两个问题要请教一下:

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 dennis
@simaliu

1、查看NioServerSocketChannelFactory类的构造函数,SelectorUtil.DEFAULT_IO_THREADS常量。

2、这个我不认为是nio的trap,而是网络编程需要注意的问题,感谢你的分享。

# re: Java NIO trick and trap  回复  更多评论   

2010-11-25 10:13 by beneo
@simaliu
1 + 2 * CPU
这个参数在garbage里面非常常用。呵呵

# re: Java NIO trick and trap  回复  更多评论   

2010-11-25 10:13 by beneo
要是有语音就更好的

# re: Java NIO trick and trap  回复  更多评论   

2011-04-22 23:10 by techq
这个太有用了,太谢谢啦

# re: Java NIO trick and trap  回复  更多评论   

2011-06-29 10:51 by bbz
我是初学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-06-29 14:25 by bbz
40页已经看到此问题答案,感谢

# re: Java NIO trick and trap  回复  更多评论   

2011-06-30 11:27 by censhao
正在使用nio呢 谢谢了

# re: Java NIO trick and trap  回复  更多评论   

2011-12-13 18:57 by wavefly
这篇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 wavefly
楼主的大量细节优化是yanf4j与mina比对测试胜出的根本原因吧,多谢你的分析

# re: Java NIO trick and trap  回复  更多评论   

2012-05-02 22:24 by aeifkz
感謝樓主分享~~XD

# re: Java NIO trick and trap  回复  更多评论   

2014-01-07 16:35 by poscard
自己本来想给团队分享一下nio的,看了dennis的ppt后,发现自己准备的太浅了。

# re: Java NIO trick and trap[未登录]  回复  更多评论   

2014-09-01 22:13 by Z
感谢分享...非常全面,非常实用

# re: Java NIO trick and trap[未登录]  回复  更多评论   

2015-07-24 12:10 by sam
能否分享音频?

只有注册用户登录后才能发表评论。


网站导航: