NodeJs多线程、多进程、定时任务
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NodeJs多线程、多进程、定时任务相关的知识,希望对你有一定的参考价值。
参考技术A 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 ,并内置了负载均衡,可有效实现多进程。
定时任务多线程的实现
参考技术A 前面我们学习了几种定时任务的实现,可以看到三个定时任务都可以执行,并且使同一个线程中串行执行,如果只有一个定时任务,这样做肯定没问题,但是当定时任务增多,如果一个任务卡死,就会导致其他任务也无法执行。所以我们这次学习多线程的实现方法。在传统的Spring项目中,我们可以在xml配置文件添加task的配置,而在SpringBoot项目中一般使用config配置类的方式添加配置,所以新建一个AsyncConfig类
@Configuration
@EnableAsync
public class AsyncConfig
/*
此处成员变量应该使用@Value从配置中读取
*/
private int corePoolSize = 10;
private int maxPoolSize = 200;
private int queueCapacity = 10;
@Bean
public Executor taskExecutor()
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(corePoolSize);
executor.setMaxPoolSize(maxPoolSize);
executor.setQueueCapacity(queueCapacity);
executor.initialize();
return executor;
@Configuration:表明该类是一个配置类
@EnableAsync:开启异步事件的支持
然后在定时任务的类或者方法上添加@Async 。最后重启项目,这样每一个任务都是在不同的线程中的
以上是关于NodeJs多线程、多进程、定时任务的主要内容,如果未能解决你的问题,请参考以下文章
java定时任务使用多线程webservcie执行了两次这是为啥?