Libev使用三种数据结构来存储不同的观察者。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
看起来更稳定?
还是其他原因?
好,我明白了。谢谢,马克!再次感谢您创建libev。 :) – changchang