/poll/epoll也应具备上述两个核心的逻辑,即等待逻辑以及唤醒逻辑,对此用伪代码来还原select/poll/epoll的设计原理.注意这里文章不过多关注使用细节,只关注伪代码实现的逻辑思路.
select...技术分析
poll技术与select技术实现逻辑基本一致,重要区别在于其使用链表的方式存储描述符fd,不受数组大小影响,对此,现对poll技术进行分析如下:
poll函数定义
// poll已经被弃用...一样,初始化等待节点的操作
poll_initwait(&table);
// do_poll的处理逻辑与do_select逻辑基本一致,只是这里用链表的方式遍历,do_select用数组的方式...poll_freewait(&table);
}
}
poll技术小结
poll技术使用链表结构的方式来存储fdset的集合,相比select而言,链表不受限于FD_SIZE的个数限制,但是对于select.../ epoll等待,与select/poll的逻辑一致
epoll_wait(int epfd, // epoll空间
struct