NodeJs 多线程(worker_threads)

本文介绍了Node.js中的worker_threads模块,用于实现多线程编程。由于JavaScript的单线程特性可能导致服务端大规模计算或耗时任务阻塞后续请求,worker_threads提供了真线程功能,通过v8-isolate实现独立的执行环境和事件循环。子线程的执行过程包括创建独立的v8 isolate、初始化libuv和执行js文件。parent线程则负责创建子线程并传递数据。worker_threads的优势在于能够共享内存,缓解性能和内存问题。
摘要由CSDN通过智能技术生成

Javascript的运行,我们知道是单线程的,目的是为了解决内存冲突等的问题,同时单线程的设计也方便问题的查找和解决,在浏览器端,单线程基本都可以满足,但是在NodeJS服务端的话,如果有大规模的计算或者耗时业务流程就会堵塞后面的请求,比如有一个客户端请求,需要从数据库里面取出数据,然后进行各种计算,一般计算过程都是用JS写的,如果这个计算过程很耗时(假如需要10s),就会导致后面的请求得不到响应,之前我们的做法就是N-API写一个C++的addon去开辟新线程去计算或者直接用模块child-process开辟一个新的js进程去计算,等返回之后再用主进程的JS去处理。

worker_threads是NodeJS team开发的真线程模块,可以做到真线程的原因当然是v8-isolate,v8-isolate是Chromium runtime 的一个独立的实例,我们的worker是完全独立于其他worker运行的,有独立的context, 也就是有独立的v8和event loop,与模块child_process和cluster的区别是能share memory,某种程度上可以克服performance和memory的问题。

子线程的执行过程:

1. 创建独立的v8 isolate,并且assgin给worker, 这使worker有独立的context。

2. libuv初始化,这让worker有独立的event loop。

3. worker开始真正的执行,event loop开始运行。

4. worker调用c++,读取主线程发过来的workerData。

5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值