skynet记录6:定时器
稍后填坑
kernel中,每一次时钟中断会trap到kernel code,这个时间间隔称之为jiffies,每秒钟发生的次数为HZ
如果是4核,分配到每个核就是HZ/4
cat /boot/config-`uname -r` | grep '^CONFIG_HZ=' 输出:
CONFIG_HZ=250
cat /proc/interrupts | grep timer && sleep 1 && cat /proc/interrupts | grep timer 输出:
0: 16 0 0 0 IO-APIC 2-edge timer
LOC: 24690231 20180418 15869859 18248079 Local timer interrupts
0: 16 0 0 0 IO-APIC 2-edge timer
LOC: 24690269 20180590 15869980 18248114 Local timer interrupts
上面休眠了1秒,这4个核的时钟中断次数加起来接近250(上面考虑printf略多)
skynet中timer数据结构:
struct timer {
struct link_list near[TIME_NEAR]; // 256个等级list,一般kernel最关注256个jiffies时间之内的定时器
struct link_list t[4][TIME_LEVEL]; // 大于256jiffies的定时器放这里,见后面详述
struct spinlock lock;
uint32_t time; // 从系统启动后经过的滴答数,即多少个1/100秒
uint32_t starttime; // 系统启动时间(绝对时间,单位为秒)
uint64_t current; // 相对时间(相对于starttime)
uint64_t current_point; // 绝对时间
};
上面的成员t:一共4个等级,64的n次方乘以256之内的放在t[n][TIME_LEVEL],单位0.01秒
64*64*64*64*256就是2^32
比如17000秒的定时器,大于64*256*0.01 小于64*256*0.01,所以放在t[1][TIME_LEVEL]队列
skynet记录6:定时器的更多相关文章
- Smart210学习记录-----linux定时器
1.内核定时器: Linux 内核所提供的用于操作定时器的数据结构和函数如下: (1) timer_list 在 Linux 内核中,timer_list 结构体的一个实例对应一个定时器 1 stru ...
- skynet记录2:模块简介
稍后填坑 bson.so client.so lpeg.so md5.so skynet.so sproto.so gate.so harbor.so logger.so snlua. ...
- skynet记录7:第一个服务logger和第二个服务bootstrap
(1)logger是skynet_context_new创建:skynet_context及mq,模块create和init (2)bootstrap启动过程:snlua时一个lua的so,对应的sn ...
- skynet记录7:服务(c和lua)
稍后填坑 1.c服务的写法(第一个服务logger分析) 2.lua服务的写法(第二个服务bootstrap分析) 3.snlua包装模块
- skynet之伪取消定时器
1.截至目前群里的成员已经对skynet中的timeout提出了更多的要求.目前skynet提供的定时器是倒计时形式,且定时器一旦设置后,便不能撤销(至少目前的实现是这样),然后调用 cb 最近有人提 ...
- cocos2d-x游戏引擎核心之三——主循环和定时器
一.游戏主循环 在介绍游戏基本概念的时候,我们曾介绍了场景.层.精灵等游戏元素,但我们却故意避开了另一个同样重要的概念,那就是游戏主循环,这是因为 Cocos2d 已经为我们隐藏了游戏主循环的实现.读 ...
- day28-Javascript定时器的应用案例
转行学开发,代码100天——2018-04-13 上篇文章中记录了定时器的用法,本篇通过两个常用案例进一步巩固定时器的应用. 案例一:消息框延时,如QQ中鼠标移动到头像,弹出一个信息框:移出后,消息框 ...
- STM32F103单片机学习—— 通用定时器
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/fengshuiyue/article/details/79150724 本篇重点记录的是STM32F ...
- 个人博客开发之blog-api 项目全局日志拦截记录
前言 大型完善项目中肯定是需要一个全局日志拦截,记录每次接口访问相关信息,包括: 访问ip,访问设备,请求参数,响应结果,响应时间,开始请求时间,访问接口描述,访问的用户,接口地址,请求类型,便于项目 ...
随机推荐
- Win10和Ubuntu双系统搭建详
最近学习云计算时,需要搭建xen和Hadoop,虚拟机容易出很多问题所以搭建了双系统,也方便以后的学习. 下面是详细搭建过程: 准备材料: U盘(容量>8G,最好是3.0接口速度快).Ultra ...
- pandas数据结构之series操作
阅读之前假定你已经有了python内置的list和dict的基础.这里内容几乎是官方文档的翻译版本. 概览: 原来的文档是在一个地方,那边的代码看起来舒服些 https://www.y ...
- (Python基础)列表的认知
以下是列表的一些知识点 name = ['关羽','张飞','刘备','曹操','诸葛亮','吕布',['吕布','吕布',],'吕布','吕布','吕布','吕布']for i in name: p ...
- 安装FrameWork后重新注册IIS
IIS和.netfw4.0安装顺序是从前到后,如果不小心颠倒了,无所谓. 打开程序-运行-cmd:输入一下命令重新注册IIS C:\WINDOWS\Microsoft.NET\Framework\v4 ...
- 用360清理了一下电脑后发现Eclipse软件无法打开
今天用360安全卫士清理了一下电脑,然后双击Eclipse软件发现不能打开,弹出以下界面: 解决方法如下: 打开计算机-属性-高级系统设置,修改系统变量里变量名为JAVA_HOME.CLASSPATH ...
- bochs的bochsrc说明
########################################## Configuration file for bochs ################### ...
- easyUI 学习
)省份-城市-区域三级联动[struts2 + ajax +非数据库版] (1)省份-城市-区域,基于jQuery的AJAX三级联动,用Struts2整合AJAX[非数据库版] $.ajax( { t ...
- Android中四大组件总结
android四大组件分别为activity.service.content provider.broadcast receiver. 一.android四大组件详解 1.activity (1)一个 ...
- Silverlight中验证码生成
public class ValidationCode { Random r = new Random(DateTime.Now.Millisecond); /// <summary> / ...
- Nginx入门基础(一)
Nginx介绍 Nginx 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP服务器. 官方测试Nginx能够支撑5万并发链接,并且cpu.内存等资源消耗却非常低,运行 ...