java nio 让我很纠结

Liusp 2011-06-08 04:35:16
JAVA NIO出来后,大家都说比原IO性能好,我相信肯定绝对一定是这样的。
但是我很纠结,为什么呢?大致的理由是:IO机制一个socket连接对应一个输入/输出通道,一个输入/输出通道在对应一个线程,这样有多个请求,就需要开辟多个线程,这样对CPU的负担大大的提高。关系是一对一的。而NIO不必,通道已经由一个线程建立好了,有事就说话,说了就去做,而且在一个线程中建立了多个通道,可以同时做很多事情,不会像原先那样开辟多个线程,耗费CPU资源,关系是1对多的。这我就很不明白,如果ABCDE5个客户端去连接IO服务端请求数据,那5个线程是至少的。但是同样连接NIO服务端呢?是和一个线程的5个通道建立了联系了吗?所以只有1个线程.那我想问这个5个通道的数据请求是并行执行的呢还是顺序执行的呢?如果是并行,1个线程能做到吗啊? 如果顺序执行是不是有等待阻塞的时间?就算NIO不考虑执行的结果正确与否顺序执行下去,是不是总得有5次处理时间? 这个同IO5个线程并行处理5个请求,谁的性能会高呢?


...全文
104 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yiyinanfei 2012-03-03
  • 打赏
  • 举报
回复
就我了解,NIO只能优化两方面,一是在大并发下可以改善客户端的用户体验,因为NIO不需要客户端排队等待,NIO有请求就会接受,当然接受了不代表服务端就执行完了哦。服务端执行还是要串行的,
二是可以减少服务端的线程数量上的压力,硬件资源是有限的,客户端发来1万个请求,服务器可能最大只能满足并发5000,那么客户端就要有5000在等待了,而NIO却不需要,1万的客户端请求NIO可能只需要起5000甚至更少的线程来执行就可以了。当然jvm没有提供在何种情况下起多少线程的机制,所以NIO线程控制还是要人为控制的。

a381323456 2012-01-12
  • 打赏
  • 举报
回复
我一样在纠结这个问题
而且我尝试在处理上去开线程让他并行执行 可是有些小任务的执行速度远远要快过执行线程的开销 可能会导致多次重复循环以后 线程才刚刚运行
etnet 2011-06-08
  • 打赏
  • 举报
回复
NIO的一个线程中当然是串行执行的,每次处理一个事件。
如果你的服务端每个请求处理时间较长,用NIO是比阻塞方式要好。

25,984

社区成员

发帖
与我相关
我的任务
社区描述
高性能WEB开发
社区管理员
  • 高性能WEB开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧