select函数相关

select调用

  1. 用户空间的timeout会被拷贝到内核的end_time(设定时间)
  2. 内核空间会分配6个fdset,分别为in,out,exception(给用户输入用的),还有res_in, res_out, res_exception(3个相应的输出给用户的)
  3. 用户fd_set会被拷贝到内核in, out, exception
  4. 遍历所有fd, 调用sock_poll
  5. 遍历完后, 可能会返回一个mask掩码(如果有读写事件发生的话), 这mask是用来设置fd_set的
  6. 也有可能没有,要是调用时间没有超过timeout,就继续重新遍历,如果超过了就返回
  7. 将fd_set从内核拷贝给用户空间, 也有可能是什么事件都没有反而是超时返回

select的问题
7. select需要两次内核<---->用户户空间的拷贝过程, 要是fd的数量过大, 这个拷贝过程很消耗时间.
8. 而且遍历时间也相当耗时,遍历所有的fd,如果fd多了,就会很耗时.
9. fd的数量最大是1024(32bits OS), 2048(64bits OS)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值