epoll数据结构

目录

  • 1.大量的fd 集合。选择什么数据结构?
  • 2、Epoll 数据结构
    • Epitem 的定义
    • Eventpoll 的定义

1.大量的fd 集合。选择什么数据结构?

查找频率很高的数据结构
1.红黑树
2.哈希(扩容缩容)
3. b/b+tree (降低树的高度,磁盘)

2、Epoll 数据结构

Epoll 主要由两个结构体:eventpoll 与 epitem。Epitem 是每一个 IO 所对应的的事件。比如
epoll_ctl EPOLL_CTL_ADD 操作的时候,就需要创建一个 epitem。Eventpoll 是每一个 epoll 所
对应的的。比如 epoll_create 就是创建一个 eventpoll。

Epitem 的定义

epoll数据结构_第1张图片

rdlink就绪队列,
sockfd,event红黑树的kv
epoll数据结构_第2张图片

Eventpoll 的定义

epoll数据结构_第3张图片
epoll_create会生成eventpoll,rbr指向红黑树,rdlist指向就绪队列,还有控制线程安全的功能

epoll_clt来添加删除修改红黑树的节点

epol如何做线程安全?
1.红黑树–> mutex
2.就绪队列–> spinlock

epoll_wait会把就绪队列里拷贝到数据events[]

你可能感兴趣的:(C++开发后端基础知识,数据结构,服务器,运维)