|游戏服务器定时任务是通过什么样的方式实现呢?

文章图片
如果是linux服务器下 , 提供两种编码比较简单的常见方案 , 抛砖引玉:
一种是使用内核提供的定时器功能 , 定时精度可达纳秒级(当然普通硬件的纳秒级几乎不可靠):
通过timerfd_create(2)函数创建一个定时器描述符 , 在flags参数里设置非阻塞和exec后关闭 , 然后设置好定时间隔和是否只执行一次之后 , 把描述符加入到epoll的事件驱动系统里 , 当epoll_wait返回该描述符可读时 , 说明定时器到点 , 可以执行回调任务函数了 。
另一种类似的常见定时器实现是 , 通过select/epoll_wait函数的超时功能 , 同时定义定时任务节点 , 用一个最小单位间隔时间设置timeval结构体 , 传入事件驱动主循环中select/epoll_wait的阻塞时间参数 。 这种实现方法的关键是要设计好一个管理定时任务节点的数据结构 , 尽可能地减少执行定时任务和增删定时任务的时间复杂度 , 保证最快到点的时间最先弹出数据结构容器 , 执行任务回调函数 。 常见的数据结构容器有 , 按到点时间排序的有序链表 , 最小时间堆等 。 这种方式精度为微秒级 。
【|游戏服务器定时任务是通过什么样的方式实现呢?】这两种方案的共同优点是 , 定时任务处理和普通网络socket读写事件处理都能使用同一个I/O多路复用机制 , 提升服务器负载能力 , 避免了另开线程 。 严重不推荐通过alarm函数或sleep函数来实现的定时功能 。 原因很简单:一 , 定时精度不够;二 , 线程大部分时间处于睡觉状态 , 程序性能 , cpu使用率低下 。
- 最前线 | 腾讯游戏发布40余款产品与项目,《王者荣耀》发布全新规划
- 腾讯游戏发布40余款产品与项目,《王者荣耀》发布全新规划
- 格力电器|游戏玩家超爱!雷神27英寸Fast-IPS显示器现在入手
- 显卡|如何组装旗舰游戏电脑?这里有你想要的答案
- 《悦程出行》PS4游戏,手把手教你退款!绝对靠谱!
- NVIDIA的DLSS技术已经深受玩家和开发者认可|性能2倍于DLSS!AMD游戏神技FSR 2.0正式支持Xb
- 让骁龙8+“凉”了 ROG游戏手机6预热:散热升级
- 今天|6000mAh比肩充电宝 ROG游戏手机6入网
- Java|Gamamobi CEO黄继德:我们的元宇宙游戏不担心体验落差
- 腾讯游戏|守护袁昆:公众号是否和网站一样没办法做了?
