nodejs——定时器

JavaScript017

nodejs——定时器,第1张

JavaScript中可以实现定时器功能的有两个函数——setTimeout和setInterval,二者的不同是setTimeout只执行一次,而setInterval是以指定的时间间隔重复执行。setTimeout可以使用clearTimeout取消,setInterval可以使用clearInterval取消。

有时,我们会用setTimeout(callback,0)将任务推迟一段很短的时间,但是其实通过process.nextTick(callback)来实现会更好,因为Node中的事件循环在一个处理事件队列的循环里运行,每循环一次称为一个“tick”。使用process.nextTick(callback)回调函数会在事件队列内所有事件处理完毕后,会在下次事件循环之前被调用,即进入下个event loop前执行;而setTimeout(callback,0)把回调延迟到后面的某个event loop执行,具体由设置的延时时间和event loop的执行时间决定。

这样可以保证my_async_function函数是顺序执行。

想定时抓取某个接口的数据,然后解析数据,通过邮件通知给我。

1、 https 用来发送网络请求

2、 node-schedule 用来实现定时任务

3、 nodemailer 用来发送邮件

介绍一下简单用法

我这里使用的QQ邮箱,使用第三方发送邮件需要打开授权,我这里开启的是 POP3/IMAP ,然后用授权码登录。 授权方法->

哈哈,还是比较成功的,达到了我预期的目标。

邮件接收的延迟比较大,大概3分钟左右,耐心等候,另外我在QQ邮箱的发件箱里没看到已发送的邮件,可能不会显示。

demo就不发了,比较简单,这几个模块组装起来就可以运行了。

JS是单线程语言,减少了线程间切换的开销,且不用考虑锁的问题,因此适合IO密集型项目。

JS的单线程,其实指的是js主引擎线程的。除此之外还有定时器线程、异步http线程(ajax)等,最终通过Event Loop协调执行。

为了充分利用多核CPU,可以使用 worker_threads 实现多线程, child_process 或 cluster 实现多进程(master-worker模式)。

不同于浏览器中的 web worker ,nodejs中通过 worker_threads 实现多线程。通常在计算密集型场景中,才需要使用NodeJs多线程,因此使用场景较少。

electron中即经常使用该模块。

cluster 封装了 child_process.fork ,并内置了负载均衡,可有效实现多进程。