精华帖 (1) :: 良好帖 (1) :: 新手帖 (18) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-12-16
accept:内核数+1
handler交给worker线程做 其实NIO很多都类似这样干的 |
|
返回顶楼 | |
发表时间:2010-12-16
贾懂凯 写道 taolei0628 写道 用Executor不见得就比你现在的方法好。
等你贴出线程池的用法后再看看有没有我预计到的问题出现吧。 给你个提示,网络连接是个比线程更重量级的资源。 确实如此,三次握手会占比较长时间,只有到第三次握手完成才会返回socket实例。我觉得如果并发访问要求比较高的话,用我上面的代码中的线程池方法应该能增加效率。不过,如果在accept方法上加一个超时机制效果会更好。 求taolei0628指点~~ TCP/IP上面还有UDP,你的例子是TCP而已。资源消耗大,更大的程度是因为走IO总线。 |
|
返回顶楼 | |
发表时间:2010-12-16
吃完饭回来没下文了?
|
|
返回顶楼 | |
发表时间:2010-12-16
rainsilence 写道 吃完饭回来没下文了?
见:http://www.iteye.com/topic/842139?page=2#1806256 |
|
返回顶楼 | |
发表时间:2010-12-16
yeshucheng 写道 accept:内核数+1 handler交给worker线程做 其实NIO很多都类似这样干的 个人觉得NIO相对于阻塞编程有以下优点: 1、节约了多客户阻塞等待的系统开销(用Selector成组监听) 2、一定程度上限制了同步问题的发生(如果你用独立的线程处理handler的话那就未必) 3、将阻塞编程中本来用stream屏蔽的套接字缓冲暴露给程序员,这样做的好处是程序员可以 根据不同的系统需求自己设计缓冲区(并且“直接缓冲区”的应用也很给力),能很好的在内存和CPU的开销见找到平衡点(这个很难,得有点功力了)。 4、当然,控制某些连接的优先级也不像阻塞编程中(仅仅通过设置线程优先级)那样不可预测了。 …… 准备过一段时间专门写一篇,今天不多说了。 |
|
返回顶楼 | |
发表时间:2010-12-16
LZ最好把你的认识深入浅出写出,这样挺好的。学习,呵呵
|
|
返回顶楼 | |
发表时间:2010-12-16
mercyblitz 写道 贾懂凯 写道 taolei0628 写道 用Executor不见得就比你现在的方法好。 等你贴出线程池的用法后再看看有没有我预计到的问题出现吧。 给你个提示,网络连接是个比线程更重量级的资源。 确实如此,三次握手会占比较长时间,只有到第三次握手完成才会返回socket实例。我觉得如果并发访问要求比较高的话,用我上面的代码中的线程池方法应该能增加效率。不过,如果在accept方法上加一个超时机制效果会更好。 求taolei0628指点~~ TCP/IP上面还有UDP,你的例子是TCP而已。资源消耗大,更大的程度是因为走IO总线。 是netjava小马哥吧,我是学员。我知道做通信我还有很长的路要走的,现在刚开始…… |
|
返回顶楼 | |
发表时间:2010-12-16
在多数java应用里用TCP还是比较靠谱的,用UDP可能要解决的问题TCP都已经帮我们解决了。
我说到的问题其实是我看到的一段基于线程池的Socket服务器端框架代码,不知道是不是普遍存在。 在那段代码中先accept,此时连接已经建立,再把它放进任务队列等待处理。 通常这个等待是有并发和等待超时限制的,我认为正确的方式是在真正能提供服务的时候再accept。 楼主的非线程池的代码正好回避了这个问题,所以我才说了上面的话。 |
|
返回顶楼 | |
发表时间:2010-12-16
最后修改:2010-12-16
贾懂凯 写道 mercyblitz 写道 贾懂凯 写道 taolei0628 写道 用Executor不见得就比你现在的方法好。
等你贴出线程池的用法后再看看有没有我预计到的问题出现吧。 给你个提示,网络连接是个比线程更重量级的资源。 确实如此,三次握手会占比较长时间,只有到第三次握手完成才会返回socket实例。我觉得如果并发访问要求比较高的话,用我上面的代码中的线程池方法应该能增加效率。不过,如果在accept方法上加一个超时机制效果会更好。 求taolei0628指点~~ TCP/IP上面还有UDP,你的例子是TCP而已。资源消耗大,更大的程度是因为走IO总线。 是netjava小马哥吧,我是学员。我知道做通信我还有很长的路要走的,现在刚开始…… 是的,没有关系,慢慢来啊,你会stronger的。 相互学习哦,呵呵!看看我给你的留言,你可以考虑一下! |
|
返回顶楼 | |
发表时间:2010-12-17
真的是折腾,直接使用NIO.2
呵呵,很简单就完成了 |
|
返回顶楼 | |