Libev使用三种数据结构来存储不同的观察者。
堆:用于按时间排序的观察者,例如ev_timer和ev_periodic。
链表:如ev_io, ev_signal,ev_child等。
数组:如ev_prepare、ev_check等ev_async。
毫无疑问,使用堆来存储计时器观察者。但是选择链表和数组的标准是什么?
存储 ev_io 观察者的数据结构似乎有点复杂。它首先是一个以fd索引为索引的数组,数组中的元素是 的链表ev_io watcher。如果使用链表作为元素,则为数组分配空间更方便。是这个原因吗?
或者只是因为插入或删除操作ev_io更频繁,ev_prepare看起来更稳定?
还是有什么其他原因?