|游戏服务器定时任务是通过什么样的方式实现呢?
文章图片
如果是linux服务器下 , 提供两种编码比较简单的常见方案 , 抛砖引玉:
一种是使用内核提供的定时器功能 , 定时精度可达纳秒级(当然普通硬件的纳秒级几乎不可靠):
通过timerfd_create(2)函数创建一个定时器描述符 , 在flags参数里设置非阻塞和exec后关闭 , 然后设置好定时间隔和是否只执行一次之后 , 把描述符加入到epoll的事件驱动系统里 , 当epoll_wait返回该描述符可读时 , 说明定时器到点 , 可以执行回调任务函数了 。
另一种类似的常见定时器实现是 , 通过select/epoll_wait函数的超时功能 , 同时定义定时任务节点 , 用一个最小单位间隔时间设置timeval结构体 , 传入事件驱动主循环中select/epoll_wait的阻塞时间参数 。 这种实现方法的关键是要设计好一个管理定时任务节点的数据结构 , 尽可能地减少执行定时任务和增删定时任务的时间复杂度 , 保证最快到点的时间最先弹出数据结构容器 , 执行任务回调函数 。 常见的数据结构容器有 , 按到点时间排序的有序链表 , 最小时间堆等 。 这种方式精度为微秒级 。
【|游戏服务器定时任务是通过什么样的方式实现呢?】这两种方案的共同优点是 , 定时任务处理和普通网络socket读写事件处理都能使用同一个I/O多路复用机制 , 提升服务器负载能力 , 避免了另开线程 。 严重不推荐通过alarm函数或sleep函数来实现的定时功能 。 原因很简单:一 , 定时精度不够;二 , 线程大部分时间处于睡觉状态 , 程序性能 , cpu使用率低下 。
- iqoo|iQOO Z5x兼备长续航与优质好屏,无压力畅玩游戏
- 40K:Battle|VR动作射击游戏「Warhammer 40K:Battle Sister」即将登陆Steam
- PSVR|Resolution Games将大力支持开发PSVR 2游戏
- 骁龙855|从3499元跌至1190元,5000mAh+骁龙855,适合玩游戏
- Google|全球游戏领域的标杆,MSI&AMD把事情做得很漂亮
- 机械键盘|与众不同!贱驴光轴机械键盘+325S游戏鼠标开箱
- 台积电|期待!苹果iPhone 14或全系用120Hz屏:玩游戏更爽
- 《消逝的光芒》开发商保证:游戏将获得 5 年的后续内容更新
- 一加科技|相比于所谓的“游戏手机”,一加10Pro,还有更加专业的影像系统
- iphone8plus|预算有限游戏党的福音 千元机用LPDDR5+UFS3.1 游戏手机还是iQOO