网络IO

网络IO

1. 概述

1.1什么是三次握手

  1. 客户端向服务器发送sny报文
  2. 服务器收到报文后,返回sny报文+ack
  3. 客服端向服务器发送ack

1.2什么是四次挥手

  1. 客服端发送关闭请求
  2. 服务器响应客服端关闭请求
  3. 服务器发送关闭请求
  4. 客服端发送确认关闭请求

2.IO

2.1 BIO

是一种阻塞io,在服务器等待客户端连接时和服务器读取客户端发送的数据时,线程都会等待阻塞,直到接收到客户端的信息。

2.2NIO

是一种非阻塞io,在读数据和连接客户端的时候都不会阻塞线程。

select:

jdk1.5以前的版本才有,就是底层用的数组,然后去轮询遍历,创建的连接是有数量限制的,有一个缺点就是有10w个连接,只有一个读事件,拿到这个读事件需要把10w个连接都便利一遍。

poll

也是jdk1.5之前才有,底层是链表,也是轮询,连接数量无限制。

epool

jdk1.5出现的,采用了多路复用,会调用linux的内核函数创建一个epool,然后监听事件,如果有读事件或者连接事件,就会以回调的方式拿到来处理响应逻辑,里面有个专门的事件list和连接list;没有的话就会阻塞等待在哪里,其实有点像队列监听事件一样,只不过换成了linux内核函数来做,因为网络连接这一块还是偏底层的。

3.netty

底层使用了nio,Netty 使用零拷贝技术和内存池来减少内存复制和垃圾回收的压力,提高数据处理速度;使用线程池异步io操作,有两个线程组,一个专门负责连接事件,一个负责读写事件, 有一个渠道处理器,是专门用来实现业务逻辑。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值