select内存拷贝问题

xiaolomg 2014-01-18 09:27:00
看到网上在说select的缺点时候,谈到select内存拷贝问题,就是从内核态到用户态的拷贝。
select的用法简单:
int res = select(maxfd+1, &readfds, NULL, NULL, 120);
if(res > 0)
{
for(int i = 0; i < MAX_CONNECTION; i++)
{
if(FD_ISSET(allConnection[i],&readfds))
{
handleEvent(allConnection[i]);
}
}
}

是哪个调用引发了状态切换和内存拷贝呢?
...全文
213 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
northwesternwind 2014-01-18
  • 打赏
  • 举报
回复
几乎所有的系统调用都会发生内核态和用户态的数据交换。干嘛要关心这个? 简单地说,你自己代码中定义的变量,申请的内存,都在用户态内存中保存。调用系统调用时,一定需要把你的内存数据传递给内核,或者把内核从i/o得到的数据传递给你的程序。
帅得不敢出门 2014-01-18
  • 打赏
  • 举报
回复
select poll 二者都要kernel把状态返回给用户空间,由用户空间进行下一步调用,二者需要轮询 epoll则是类似于向内核注册回调的方式,不需要轮询

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧