erlang的timer定时器浅析
timer作为其计时器:
erlang的计时器timer是通过一个唯一的timer进程实现的,该进程是一个gen_server,用户通过timer:send_after和timer:apply_after在指定时间间隔后收到指定消息或执行某个函数,每个用户的计时器都是一条记录,保存在timer的ets表timer_tab中,timer的时序驱动通过gen_server的超时机制实现。若同时使用timer的用户过多,则timer将响应不过来,成为瓶颈。
更好的方法是使用erlang的原生计时器erlang:send_after和erlang:start_timer,它们把计时器附着在进程自己身上。
看了段timer的源码,如下:
schedule_cast(Msg, Default, Timers) ->%% Cancel the old timer...TRef = proplists:get_value(Msg, Timers),timer:cancel(TRef),%% Lookup the interval...IntervalKey = list_to_atom(atom_to_list(Msg) ++ "_interval"),Interval = sync_utils:get_env(IntervalKey, Default),%% Schedule the call...{ok, NewTRef} = timer:apply_after(Interval, gen_server, cast, [?SERVER, Msg]),%% Return the new timers structure...lists:keystore(Msg, 1, Timers, {Msg, NewTRef}).
这里的 timer:apply_after/4 这里为什么要这么写? timer:apply_after(Time, Module, Function, Arguments) -> {ok, TRef} | {error, Reason}
没有去调用timer:send_after 查看API后,apply_after是函数形式,send_after是发消息,查看timer的源码之后,发现send_after就是调用apply_after,只是两种写法罢了。 timer的源码链接:见 https://github.com/zhongwencool/otp/blob/maint/lib/stdlib/src/timer.erl 从学贵有恒的博客中,看到了下面的图:这是根据timer源码,画的流程图,
timer的进程都是通过一个唯一的timer进程实现的,该进程是一个gen_server。建议使用erlang::send_after和erlang:start_timer,它们把计时器附着在进程自己身上.
转载于:https://www.cnblogs.com/unqiang/p/4095509.html
erlang的timer定时器浅析相关推荐
- linux内核定时器死机,浅析linux内核中timer定时器的生成和sofirq软中断调用流程
浅析linux内核中timer定时器的生成和sofirq软中断调用流程 mod_timer添加的定时器timer在内核的软中断中发生调用,__run_timers会spin_lock_irq(& ...
- erlang底层c定时器设计-Erlang源码学习二
Erlang底层的定时器实现位于源码的erts/emulator/beam/time.c文件,用时间轮的方式动态添加和删除定时器,结构体名为typedef struct ErtsTimerWheel_ ...
- Timer定时器开发
Timer定时器开发 定时器的作用是不占线程的等待一个确定时间,同样通过callback来通知定时器到期. 参考:https://github.com/sogou/workflow 定时器的创建 同样 ...
- java Timer定时器管理类
1.java timer类,定时器类.启动执行定时任务方法是timer.schedule(new RemindTask(), seconds*1000);俩参数分别是TimerTask子类,具体执行定 ...
- timer.schedule —— timer定时器的用法
Java.util.Timer定时器,实际上是个线程,定时调度所拥有的TimerTasks. 一个TimerTask实际上就是一个拥有run方法的类,需要定时执行的代码放到run方法体内,TimerT ...
- python timer使用-Python timer定时器两种常用方法解析
这篇文章主要介绍了Python timer定时器两种常用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 方法一,使用线程中现成的: 这种一般 ...
- 【Android 异步操作】Timer 定时器 ( Timer 与 TimerTask 基本使用 | Timer 定时器常用用法 | Timer 源码分析 )
文章目录 一.Timer 定时器基本使用 二.Timer 定时器常用用法 三.Timer 源码分析 四.Timer 部分源码注释 五.源码及资源下载 参考文档 : Timer 定时器 API 文档 T ...
- java项目中多个定时器_在java项目中如何使用Timer定时器
在java项目中如何使用Timer定时器 发布时间:2020-11-16 16:36:16 来源:亿速云 阅读:97 作者:Leah 在java项目中如何使用Timer定时器?很多新手对此不是很清楚, ...
- java timer线程结束_Java线程Timer定时器用法详细总结
定时/计划功能主要使用的就是Timer对象,它在内部还是使用多线程的方式进行处理,所以它和线程技术还是有非常大的关联. Timer类主要作用就是设置计划任务,但封装任务的类却是TimerTask类.T ...
- Timer定时器控件 1130
Timer定时器控件 1130 引入 Timer 属性
最新文章
- OneFlow 并行特色
- Html 内联元素、外联元素 和 可变元素
- Android 通过onTouchEvent判断是否为双击事件
- spark的python开发安装方式_PyCharm搭建Spark开发环境的实现步骤
- SAP 电商云 Spartacus UI CI 脚本分析
- (七)SpringBoot+SpringCloud —— 集成断路器
- jwt认证机制优势和原理_微服务统一登录认证怎么做?JWT?
- javacript 数据类型
- C语言涉及数组的大作业,c语言大作业_基于数组的学生信息管理系统.doc
- html5制作人物动作,骨骼动画制作新利器:快速制作动作人物动画,省时简单!...
- 《那些年啊,那些事——一个程序员的奋斗史》——21
- java编程实现算符优先分析法,编译原理实验三-算符优先分析法
- 【Linux杂篇】Cron是什么?利用Cron Job自动执行定时任务
- 国企社招很少计算机岗位,为什么国企几乎都是校招,很少有社招呢?
- VIJOS 1114 FBI树
- Latch及latch冲突
- 【数据可视化应用】xarray 绘图可视化(五)-二进制GrADS气象数据处理(附代码)
- ie11对象不支持此属性和方法 ie11的缓存问题
- magento 2 Send Tracking Information 发送跟踪信息 无法发送邮件
- [x98 air 3g平板]安装任意版本32位win10的方法