zoukankan      html  css  js  c++  java
  • node中对于定时器timeout.unref()与clearTimeout() clearInterval()区别

    先贴官方文档对于timeout.unref()的解释:当调用时,活动的 Timeout 对象不要求 Node.js 事件循环保持活动。 如果没有其他活动保持事件循环运行,则进程可能在 Timeout 对象的回调被调用之前退出。 多次调用 timeout.unref() 没有效果。

    通俗易懂的解释就是:只有当目前的进程中只有一个定时器,且这个定时器对象调用了unref方法时,才会不去调用timeout对象的回调函数。

    看例子:

     1 a===>> var timer = setInterval(function () {
     2          console.log(new Date, 1)
     3        }, 1000)
     4 
     5 var fn = function () {
     6     console.log(new Date, 2)
     7 }
     8 
     9 var timer2 = setInterval(fn, 1000)
    10 
    11 timer2.unref()

    执行这段代码,结果是每隔1秒打印两个时间,貌似timer2.unref()这句不起作用。其实不是,再回想之前的原理:如果调用了unref函数的定时器在事件循环中是仅存在的一个, 那么程序不会继续运行下去;
    函数中a处如果被注释掉, 此时相当于事件循环队列中只有一个timer2因此程序退出,如果把a处的setInterval换成setTimeout即让timer也仅运行一次, 那么timer和timer2都只会允许一次,
    我理解的是timer 在的时候timer2在事件队列中不是唯一的因此它会继续执行.
    至此,我认为已经把timeout.unref()的原理解释清了。接下来说下clear,我理解他就是彻底清除了预定的定时器。
  • 相关阅读:
    操作系统的安装与启动基本原理
    Arch linux安装
    18 个最佳代码编辑器/IDE推荐
    2011年排名前七位的Linux操作系统。
    十大流行linux
    Java中浮点型数据Float和Double进行精确计算的问题
    Inside JVM 内存模型
    java常见面试题及答案
    Java内存模型
    虚拟机性能监控与故障处理工具
  • 原文地址:https://www.cnblogs.com/ww93/p/9286348.html
Copyright © 2011-2022 走看看