论坛首页 Java企业应用论坛

如果你用单线程写Socket,为什么要折腾?--单线程、多线程、线程池

浏览 10416 次
精华帖 (1) :: 良好帖 (1) :: 新手帖 (18) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-12-16  
accept:内核数+1
handler交给worker线程做

其实NIO很多都类似这样干的
0 请登录后投票
   发表时间:2010-12-16  
贾懂凯 写道
taolei0628 写道
用Executor不见得就比你现在的方法好。
等你贴出线程池的用法后再看看有没有我预计到的问题出现吧。
给你个提示,网络连接是个比线程更重量级的资源。

确实如此,三次握手会占比较长时间,只有到第三次握手完成才会返回socket实例。我觉得如果并发访问要求比较高的话,用我上面的代码中的线程池方法应该能增加效率。不过,如果在accept方法上加一个超时机制效果会更好。
求taolei0628指点~~



TCP/IP上面还有UDP,你的例子是TCP而已。资源消耗大,更大的程度是因为走IO总线。
0 请登录后投票
   发表时间:2010-12-16  
吃完饭回来没下文了?
0 请登录后投票
   发表时间:2010-12-16  
rainsilence 写道
吃完饭回来没下文了?

见:http://www.iteye.com/topic/842139?page=2#1806256
0 请登录后投票
   发表时间:2010-12-16  
yeshucheng 写道
accept:内核数+1
handler交给worker线程做

其实NIO很多都类似这样干的

个人觉得NIO相对于阻塞编程有以下优点:
1、节约了多客户阻塞等待的系统开销(用Selector成组监听)
2、一定程度上限制了同步问题的发生(如果你用独立的线程处理handler的话那就未必)
3、将阻塞编程中本来用stream屏蔽的套接字缓冲暴露给程序员,这样做的好处是程序员可以
根据不同的系统需求自己设计缓冲区(并且“直接缓冲区”的应用也很给力),能很好的在内存和CPU的开销见找到平衡点(这个很难,得有点功力了)。
4、当然,控制某些连接的优先级也不像阻塞编程中(仅仅通过设置线程优先级)那样不可预测了。
……
准备过一段时间专门写一篇,今天不多说了。
0 请登录后投票
   发表时间:2010-12-16  
LZ最好把你的认识深入浅出写出,这样挺好的。学习,呵呵
0 请登录后投票
   发表时间:2010-12-16  
mercyblitz 写道
贾懂凯 写道
taolei0628 写道
用Executor不见得就比你现在的方法好。
等你贴出线程池的用法后再看看有没有我预计到的问题出现吧。
给你个提示,网络连接是个比线程更重量级的资源。

确实如此,三次握手会占比较长时间,只有到第三次握手完成才会返回socket实例。我觉得如果并发访问要求比较高的话,用我上面的代码中的线程池方法应该能增加效率。不过,如果在accept方法上加一个超时机制效果会更好。
求taolei0628指点~~



TCP/IP上面还有UDP,你的例子是TCP而已。资源消耗大,更大的程度是因为走IO总线。

是netjava小马哥吧,我是学员。我知道做通信我还有很长的路要走的,现在刚开始……
0 请登录后投票
   发表时间:2010-12-16  
在多数java应用里用TCP还是比较靠谱的,用UDP可能要解决的问题TCP都已经帮我们解决了。
我说到的问题其实是我看到的一段基于线程池的Socket服务器端框架代码,不知道是不是普遍存在。
在那段代码中先accept,此时连接已经建立,再把它放进任务队列等待处理。
通常这个等待是有并发和等待超时限制的,我认为正确的方式是在真正能提供服务的时候再accept。
楼主的非线程池的代码正好回避了这个问题,所以我才说了上面的话。
0 请登录后投票
   发表时间:2010-12-16   最后修改:2010-12-16
贾懂凯 写道
mercyblitz 写道
贾懂凯 写道
taolei0628 写道
用Executor不见得就比你现在的方法好。
等你贴出线程池的用法后再看看有没有我预计到的问题出现吧。
给你个提示,网络连接是个比线程更重量级的资源。

确实如此,三次握手会占比较长时间,只有到第三次握手完成才会返回socket实例。我觉得如果并发访问要求比较高的话,用我上面的代码中的线程池方法应该能增加效率。不过,如果在accept方法上加一个超时机制效果会更好。
求taolei0628指点~~



TCP/IP上面还有UDP,你的例子是TCP而已。资源消耗大,更大的程度是因为走IO总线。

是netjava小马哥吧,我是学员。我知道做通信我还有很长的路要走的,现在刚开始……



是的,没有关系,慢慢来啊,你会stronger的。

相互学习哦,呵呵!看看我给你的留言,你可以考虑一下!
0 请登录后投票
   发表时间:2010-12-17  
真的是折腾,直接使用NIO.2
呵呵,很简单就完成了
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics