Chinaunix首页 | 论坛 | 博客
  • 博客访问: 99223
  • 博文数量: 41
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 486
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-18 20:09
文章分类

全部博文(41)

文章存档

2016年(1)

2015年(1)

2014年(9)

2013年(30)

我的朋友

分类: C/C++

2013-07-03 09:36:04


记得之前有人问,为什么iocp, epoll不是遍历的,今天突然想说几句
---------------------------------------
网络数据的流程:
 设备(网卡)---io中断---cpu---应用程序
------------------------------------------------------
iocp对每个新的套接字都绑定了网卡(CreateIoCompletionPort),这样,网卡有网络事件时,cpu就会把网络事件写到一个队列,叫完成队列,GetQueuedCompletionStatus的线程从完成队列取网络事件,返回

select是 select的线程主动去问cpu, 我的套接字1是否有网络事件,我的套接字2是否有,我的套接字3是否有;
 而iocp的线程,是只要完成队列里有事件,就取出来。
------------------------------
epoll是给每个套接字绑定了一个回调函数,当cpu知道有网络事件时,主动通知epoll_wait的线程,该线程调用就绪套接字的回调函数。 所以epoll也不是轮询

阅读(625) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~