一般游戏服务器里定时任务是通过什么样的方式完成呢?

如果是linux服务器下,提供两种编码比较简单的常见方案,抛砖引玉: 一种是使用内核提供的定时器功能,定时精度可达纳秒级(当然普通硬件的纳秒级几乎不可靠): 通过timerfd_create(2)函数创建一个定时器描述符,在flags参数里设置非阻塞和exec后关闭,然后设置好定时间隔和是否只执行一次之后,把描述符加入到epoll的事件驱动系统里,当epoll_wait返回该描述符可读时,说明定时器到点,可以执行回调任务函数了。 另一种类似的常见定时器实现是,通过select/epoll_wait函数的超时功能,同时定义定时任务节点,用一个最小单位间隔时间设置timeval结构体,传入事件驱动主循环中select/epoll_wait的阻塞时间参数。这种实现方法的关键是要设计好一个管理定时任务节点的数据结构,尽可能地减少执行定时任务和增删定时任务的时间复杂度,保证最快到点的时间最先弹出数据结构容器,执行任务回调函数。常见的数据结构容器有,按到点时间排序的有序链表,最小时间堆等。这种方式精度为微秒级。 这两种方案的共同优点是,定时任务处理和普通网络socket读写事件处理都能使用同一个I/O多路复用机制,提升服务器负载能力,避免了另开线程。严重不推荐通过alarm函数或sleep函数来实现的定时功能。原因很简单:一,定时精度不够;二,线程大部分时间处于睡觉状态,程序性能,cpu使用率低下。TG:li9047

暗黑源码库包揽全网大多数网站源码教程,提供小程序、公众号、APP、H5、商城、支付、游戏、区块链、直播、影音、小说等源码教程,注册会员可免费学习交流。
用户必须遵守《计算机软件保护条例(2013修订)》第十七条:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。鉴于此条例,用户从本平台下载的全部源码(软件)教程仅限学习研究,未经版权归属者授权不得商用,若因商用引起的版权纠纷,一切责任均由使用者自行承担,本平台所属公司及其雇员不承担任何法律责任。
暗黑源码库 » 一般游戏服务器里定时任务是通过什么样的方式完成呢?
赞助VIP 享更多特权,立即登录下载海量资源
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡