Select、poll、epoll的区别

快速了解多路复用器 {Select、poll、epoll}

1.select

上一篇已经讲过什么是select了,可以把它比做是一个大管家。

2.poll

poll其实和select是一类的,都是内核提供的,poll是select的一个升级版本。
两者区别在于:
1.select 提供1024个文件描述符,传递的是一个linklist
2.poll 是没有限制的 ,但是传递的是一个array数组。

但是两者都存在问题,那问题是什么呢?

  1. 就是每次循环都有和内核数据的传输

    有些fd传给内核一次,内核保存。但是怎么做呢?

    1)首先内核要创建一个空间,然后把fd增加进去,即便循环1万次,也就是第一次的时候放进去了。
    2)循环,等待通知哪些fd可以读和写。
  2. 内核每次都帮你遍历这些fd

3.epoll

什么是epoll呢?也是个多路复用器、说明见如下图所示:
epoll会在内核里开辟一个空间7fd,然后把server4fd放进去,然后把连接上的客户端8fd也放进去,左边是对应的Java代码。
epoll_create=7是表示创建了一个文件描述符为7的空间。

在这里插入图片描述

总结:
select、poll和epoll的区别如下图:
select 和poll 是在程序那维护一个空间fd,会把收到的文件描述符都收集起来,每次调内核的时候都是调select或者poll()把fd作为参数传过去看看有没有。
epoll在内核那里会有一个空间fd,每多一个fd就往里放一个,还有一个调用wait(),哪个有结果了,会返回一个,然后程序拿走就行。
在这里插入图片描述
但是select、poll和epoll都是多路复用器.

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值