网络io
同步:需要重新自己从内核获取数据
异步:系统内核自动将数据保存至用户态
阻塞:直到获取到数据才返回用户态
非阻塞:无论是否有数据都返回用户态,具有返回值
网络io:即客户端与服务端通过tcp建立链接开辟相关的资源进而传输数据
四元组:
客户端IP+客户端port + 服务端Ip+服务端port
以上四个信息确定唯一一个链接
一个服务端对一个客户端最多有65535个链接即同一个客户端ip最多使用65535个port链接到服务端
链接过程
new socket===》fd 开启一个sockt
bind(fd) 绑定socket
listen(fd) 对绑定的sockt进行监听
当有客户端链接时 创建fd2即开辟对客户端的资源
对于链接资源的开辟在内核创建链接时就已完成而并不是java的sever.accept之后在完成
bio
阻塞io,要么阻塞,发生无效等待,导致后续链接的数据不能处理
要么开辟过多的线程资源,消耗cpu资源频繁切换
nio
非阻塞io,获取数据不在阻塞,返回有数据的文件描述符
由select/poll 或者epoll实现
select/poll:去获取结果时需要传递文件描述符集合并且遍历描述符查询结果
epoll:内核开辟空间记录文件描述符,收到数据时修改文件描述符状态,获取时直接返回不需要遍历
两种实现方式都需要程序自己遍历结果获取从内核获取数据

浙公网安备 33010602011771号