东莞微信网站建设怎样汕头企业免费建站
东莞微信网站建设怎样,汕头企业免费建站,如何做企业网站营销,下列哪个网站不属于sns(社交网络)1. 定时器解决了什么问题#xff1f;
在项目中#xff0c;通常有诸如心跳机制、KEY到期机制等等#xff0c;这种任务周期性执行或者延迟执行的场景。
所以 就需要定时器来实现这种周期任务或者延迟任务的执行。
2. 如何实现定时器#xff1f;
要实现定时器首先需要进行2个抉…1. 定时器解决了什么问题在项目中通常有诸如心跳机制、KEY到期机制等等这种任务周期性执行或者延迟执行的场景。所以 就需要定时器来实现这种周期任务或者延迟任务的执行。2. 如何实现定时器要实现定时器首先需要进行2个抉择用什么容器/数据结构 来存储延迟任务用什么机制来等待任务到期2.1 定时任务的存储结构可以用最小堆、红黑树、时间轮来存储定时任务如果用最小堆或者红黑树来存储定时任务的话就直接用epoch time作为key然后value就是定时任务。最小堆对应stl中的priority_queue容器但是不支持重复key以及随机删除一般用vector容器自己实现插入任务将任务放到数组的最末尾然后进行上浮操作堆大小弹出最近的任务将根节点弹出然后用末尾元素覆盖根节点元素然后进行下沉操作堆大小–删除任务如果想要支持删除最小堆中的任务需要维护一个hashmap记录任务id和数组下标的映射关系找到下标后用末尾元素覆盖下标对于元素然后进行下沉并上浮操作堆大小–最小堆的优点因为是数组所以cache友好。红黑树对应stl中的map/multimap容器一般用multimap因为支持重复的key红黑树的优点支持任意节点删除支持范围查询红黑树的缺点cache不友好而且需要存储父子节点和颜色信息。时间轮模拟时间转盘每一个槽位代表一个时间刻度(如1ms)插入任务时根据当前时间计算出任务多少时间后会触发直接将任务插入对应的槽位。时间轮的优点插入删除都是O(1)O(1)O(1)的复杂度性能好。时间轮的缺点如果刻度太大会导致精度损失如果刻度太小会导致占用太多内存如果实现多层时间轮的话比较复杂。2.2 等待定时任务到期的机制因为定时任务其实也是一个事件就需要和异步事件模型进行抽象统一所以可以用以下的机制来等待任务到期。timerfdselect/poll/epoll的超时参数iouring的io_uring_prep_timeout等待流程是计算距离当前时间 和 最快的定时任务的时间 的差值diff将diff填入上面几种机制的等待时间事件触发或者等待时间结束执行所有的过期任务