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,我理解他就是彻底清除了预定的定时器。
  • 相关阅读:
    Codeforces 115A- Party(DFS)
    【剑指offer】Q19:二叉树的镜像
    Codeforces Round #244 (Div. 2)D (后缀自己主动机)
    iWatch报错: Authorization request cancled
    [HDU 1421]搬寝室(富有新意的DP)
    hdu 2883 kebab(时间区间压缩 && dinic)
    bzoj-3524 Couriers
    设计模式
    HDU 5063 Operation the Sequence(暴力)
    报错OPTION SQL_SELECT_LIMIT=
  • 原文地址:https://www.cnblogs.com/ww93/p/9286348.html
Copyright © 2011-2022 走看看