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
看起来更稳定?
还是有什么其他原因?