文章目录
io,nio和netty的关系
io
io 就是input,output 输入输出流。
java.nio(这么写百度比较容易搜到)
nio(new-io) 顾名思义,就是新的io流。对比传统io,它的概念以及实现方式都有了很大的改变。 速度提升了很多。
nio是新东西么,是java8,java9才有的新特性么?
别傻了,jdk1.4就推出了nio,还不会用它? 要紧跟时代的步伐啊。
netty
基于nio的框架。
它简化了TCP/UDP客户端服务端编程,开发人员不再关注底层的Socket读取和写入,而且Netty提供了不少的handler(如http、mqtt、redis协议等)实现,简化了基于网络协议的编程复杂度。
nio三大组件
selector
传统io是每个请求单独开启一个线程。如果并发量大,很容易出问题。
selector相当于一个调度器。这个线程是常开的,用来管理多个请求。
channel
顾名思义,channel就是频道的意思。每个channel代表不同的请求。
buffer
承载数据的容器。
其他
selector/poll和epoll的区别
selector和poll可以理解为差不多。主要区别在poll比selector支持的文件数多些。
epoll和前2者不同,可以理解为event-poll,基于事件的poll。
poll和selector遍历的复杂度是O(n) ,epoll的复杂度是O(1)