java nio tcp_谈谈关于java nio通信和传统io TCP通信的看法?

貌似只有刚开始学习网络编程才会纠结这个,我记得我刚开始也纠结这个,觉得好高深。后面无非就是用别人API,在while循环写业务代码而已,不用太纠结。你自己用几种模式实现一个简单web,然后测试10个同时访问, 100同时访问, 1000 访问,测试一下性能,然后增加文件下载。你可能就明白了。

下面只谈几种模式逻辑,不谈API细节。

模式1:业务代码简单,就是while不停的读,如果多进程可以支持多个用户,如果请求消耗不长,开启100~200进程也能对付并发不高的情况,PHP多进程大概就这个逻辑,缺点,并发能力只能靠多进程,消耗内存比较大,优点就是开发简单,业务简单就算进程崩溃,也基本不影响其它进程。

模式2:多线程,只是第一种加强版本而已,通过线程数来提高并发能力,同时支持多进程了,单个线程不是最优解,这种一般也用线程池,不然线程开销也不小。

模式3:非阻塞不管linux epoll和 window完成端口,系统提供给你单线程最优化的效率而已,这种模式也可以用多线程,但一般用单线程就够了。

不管哪种IO都是用来读写网络数据,一般业务代码是放在另外一个单独线程,这样子性能是最佳的。如果你业务代码比较耗时,你用模式3(业务也在同一个线程)一样解决不了问题。所以一般网络开发,一般都是业务层代码开发,底层网络都是封装好的,大家都差不多。就看你数据库,文件读写,缓存 管理能力了。

你可能感兴趣的:(java,nio,tcp)