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定时器浅析相关推荐

  1. linux内核定时器死机,浅析linux内核中timer定时器的生成和sofirq软中断调用流程

    浅析linux内核中timer定时器的生成和sofirq软中断调用流程 mod_timer添加的定时器timer在内核的软中断中发生调用,__run_timers会spin_lock_irq(& ...

  2. erlang底层c定时器设计-Erlang源码学习二

    Erlang底层的定时器实现位于源码的erts/emulator/beam/time.c文件,用时间轮的方式动态添加和删除定时器,结构体名为typedef struct ErtsTimerWheel_ ...

  3. Timer定时器开发

    Timer定时器开发 定时器的作用是不占线程的等待一个确定时间,同样通过callback来通知定时器到期. 参考:https://github.com/sogou/workflow 定时器的创建 同样 ...

  4. java Timer定时器管理类

    1.java timer类,定时器类.启动执行定时任务方法是timer.schedule(new RemindTask(), seconds*1000);俩参数分别是TimerTask子类,具体执行定 ...

  5. timer.schedule —— timer定时器的用法

    Java.util.Timer定时器,实际上是个线程,定时调度所拥有的TimerTasks. 一个TimerTask实际上就是一个拥有run方法的类,需要定时执行的代码放到run方法体内,TimerT ...

  6. python timer使用-Python timer定时器两种常用方法解析

    这篇文章主要介绍了Python timer定时器两种常用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 方法一,使用线程中现成的: 这种一般 ...

  7. 【Android 异步操作】Timer 定时器 ( Timer 与 TimerTask 基本使用 | Timer 定时器常用用法 | Timer 源码分析 )

    文章目录 一.Timer 定时器基本使用 二.Timer 定时器常用用法 三.Timer 源码分析 四.Timer 部分源码注释 五.源码及资源下载 参考文档 : Timer 定时器 API 文档 T ...

  8. java项目中多个定时器_在java项目中如何使用Timer定时器

    在java项目中如何使用Timer定时器 发布时间:2020-11-16 16:36:16 来源:亿速云 阅读:97 作者:Leah 在java项目中如何使用Timer定时器?很多新手对此不是很清楚, ...

  9. java timer线程结束_Java线程Timer定时器用法详细总结

    定时/计划功能主要使用的就是Timer对象,它在内部还是使用多线程的方式进行处理,所以它和线程技术还是有非常大的关联. Timer类主要作用就是设置计划任务,但封装任务的类却是TimerTask类.T ...

  10. Timer定时器控件 1130

    Timer定时器控件 1130 引入 Timer 属性

最新文章

  1. OneFlow 并行特色
  2. Html 内联元素、外联元素 和 可变元素
  3. Android 通过onTouchEvent判断是否为双击事件
  4. spark的python开发安装方式_PyCharm搭建Spark开发环境的实现步骤
  5. SAP 电商云 Spartacus UI CI 脚本分析
  6. (七)SpringBoot+SpringCloud —— 集成断路器
  7. jwt认证机制优势和原理_微服务统一登录认证怎么做?JWT?
  8. javacript 数据类型
  9. C语言涉及数组的大作业,c语言大作业_基于数组的学生信息管理系统.doc
  10. html5制作人物动作,骨骼动画制作新利器:快速制作动作人物动画,省时简单!...
  11. 《那些年啊,那些事——一个程序员的奋斗史》——21
  12. java编程实现算符优先分析法,编译原理实验三-算符优先分析法
  13. 【Linux杂篇】Cron是什么?利用Cron Job自动执行定时任务
  14. 国企社招很少计算机岗位,为什么国企几乎都是校招,很少有社招呢?
  15. VIJOS 1114 FBI树
  16. Latch及latch冲突
  17. 【数据可视化应用】xarray 绘图可视化(五)-二进制GrADS气象数据处理(附代码)
  18. ie11对象不支持此属性和方法 ie11的缓存问题
  19. magento 2 Send Tracking Information 发送跟踪信息 无法发送邮件
  20. [x98 air 3g平板]安装任意版本32位win10的方法

热门文章

  1. 在Leangoo里怎么修改密码?
  2. PowerDesigner之PDM(物理概念模型)
  3. 【万里征程——Windows App开发】使用华丽丽的字体
  4. 计算机网络基础(二)
  5. 使用telnet登录varnish3.x管理缓存时认证问题
  6. JS中的各种尺寸问题
  7. 数据库一键自动生成 Java 实体类和数据库文档
  8. mybatis的多AND条件查询。批量插入。String分割查询。
  9. [渝粤教育] 江西理工大学 新融合大学英语(I) 参考 资料
  10. [渝粤教育] 西南科技大学 语言学概论(汉语言文学) 在线考试复习资料