网络编程-select、poll、epoll

1.问题

当有多个客户端连接去请求服务器的时候,如果同步阻塞的话,就会出现排队处理的情况,处理请求的效率会非常的慢。这种是同步阻塞。一个线程只能处理一个请求。遇到IO的时候就只能选择等待。

当然我们可以使用多线程的方式进行处理,也就是说一个连接使用一个线程,几十个连接还是能处理的,当连接超过几百个的话可能服务器就很难应付。只进行线程的切换就消耗掉了大批的资源。从内核态到用户态来回切换。

2.多路复用IO

从字面意思的理解是多个连接socket(线程)公用一个线程。忙闲等待。

3.具体的实现方式

select、poll、epoll。

select()函数中会维护一个fd_set,用来保存连接的socket,file descriptor.文件描述符会记录读写状态,是否读写完成。当有读写事件发生的时候就会通知。select()去调用的时候回去遍历这个数组假设有已经读写完成的fd,那么就去通知他。

依靠的是遍历。

poll 同select类似

epoll() 依靠的是回调。当事件读写完成之后回去回调fd。然后我们就知道拿一些socket已经完成了,直接遍历这个队列即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值