多路复用

  • 单线程的遍历文件描述符,看看有没有内容,有内容,就直接弄过来
  • 判断有没有数据是程序做的,效率比较低

1:select

  • rset 有五个描述符,是运行在用户空间的,此时会拷贝到我们的内核态
  • 如果没有数据,内核就会一直判断,阻塞状态
  • 有数据,会把FD设置为有数据,select函数会返回
  • 然后再判断哪一个fd被设置了,会将数据给读出来(可能同时几个都有数据,所以还是需要遍历)
  • max + 1 = 9 + 1 = 10,给他卡住长度
select (max + 1, &rset, NULL, NULL, NULL)

我们将文件描述符收集过来,交给内核,内核帮助我们判断哪一个有数据,当一个或者是多个有数据的时候,select函数就会被返回,并且有数据的FD会被置位,返回之后,我们遍历所有的文件描述符,看看哪一个的FD被设置了,被设置的有数据的

将FD交给了内核,让内核来帮助我们判断哪一个有数据

  • 缺点
    • FD 需要被置位
    • 需要整体的拷贝,用户态和内核态的开销
    • select 返回的时候,需要再次的进行遍历
    • 1980年的 API

2:poll

poll(pollfds,5,50000)

struct pollfd{
	int fd;
	short events;
	short reevents;
}

  • 我们设置的是reevents

3:epoll

  • 将白板上进行写字,一个文件描述符,和一个事件
  • epfd这一块内存是用户态和内核态共享的,我们的内核态还是帮我们进行判断
  • 设置位置,重排,将有数据的放在最前面的位置
  • 返回值 是有多少个3 ,则遍历前三个
epoll_ctl(epfd,)
  • nginx 和redis 使用 epoll
  • Java nio - epoll

SSD

DB对 SSD 进行了优化

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值