传统模式:
[img]http://dl.iteye.com/upload/attachment/408228/92ea4afd-c45a-3aed-944b-b163dd760e67.jpg[/img]
NIO + 线程池模式:
[img]http://dl.iteye.com/upload/attachment/408230/c06aaae5-fdbc-30d1-892e-0a41bb54c6c5.jpg[/img]
[b]优势:[/b]
1、 减少了接收的线程数。
2、 利用线程池技术控制了处理线程的数量。
3、 从测试数据来看,消息的吞吐量是极大的提升,从原来的1000条/秒提升到现在的10W条/秒。
[b]注意点:[/b]
1、 线程池技术时,要自己写许多代码来控制并发安全。
2、 NIO有一些BUG,列举如下:
1、 socketchannel.close()有时候关不掉socket,需要多次关闭
2、 selector在注销和注册监听时,有时候不能立刻反映到程序中,需要自己在程序中适时的wakeup一下。
[b]应裴小星的要求,把我以前写的一个用nio收发消息的demo传上来(见src.zip)[/b]:入口程序:com.talent.NioClient(直接运行这个类就可以了)
[img]http://dl.iteye.com/upload/attachment/408228/92ea4afd-c45a-3aed-944b-b163dd760e67.jpg[/img]
NIO + 线程池模式:
[img]http://dl.iteye.com/upload/attachment/408230/c06aaae5-fdbc-30d1-892e-0a41bb54c6c5.jpg[/img]
[b]优势:[/b]
1、 减少了接收的线程数。
2、 利用线程池技术控制了处理线程的数量。
3、 从测试数据来看,消息的吞吐量是极大的提升,从原来的1000条/秒提升到现在的10W条/秒。
[b]注意点:[/b]
1、 线程池技术时,要自己写许多代码来控制并发安全。
2、 NIO有一些BUG,列举如下:
1、 socketchannel.close()有时候关不掉socket,需要多次关闭
2、 selector在注销和注册监听时,有时候不能立刻反映到程序中,需要自己在程序中适时的wakeup一下。
[b]应裴小星的要求,把我以前写的一个用nio收发消息的demo传上来(见src.zip)[/b]:入口程序:com.talent.NioClient(直接运行这个类就可以了)