libev最大的特点是采用了轮询文件描述符(select,poll,epoll,iocp,kqueue)的方式来代替线程调度和切换,省去了线程切换,效率很高。
用小顶堆而不是链表来管理定时器,有以下优势:
1、容器中的元素实现有序排列(当然链表也能做有序排列,但性能不行,参见后面几点),这样在轮询时只需要检查前几个元素,而不需要遍历所有元素。
2、小顶堆的操作,无论是插入,还是删除,时间复杂度都在O(1)~O(logN)之间。有序链表,删除的时间复杂度为O(1),但插入的时间复杂度为O(N/2)。
所以综合来看,小顶堆的效率大幅优于链表。