如何在nodejs中运行多线程脚本程序

前言(可不看,笔者个人感悟):

最近在写爬虫相关的脚本,众所周知,JavaScript是单线程的,所以在编写脚本之初,我十分愚蠢的等待一次一次爬取信息,我发现一个问题就是这种行为太低效率了,应该不可能是这样的,于是我去了解多线程和单线程一下更详细的信息,其实对于基本概念大部分学计算机应该都有所耳闻,就像我开始就知道JavaScript是单线程一样,我早就听说js其实也做写服务端和客户端之间传菜员(俗话),也就是是js也有他的优势,他不可能被单线程局限住的,于是随着我不断看视频,我发现其实JavaScript中也可以执行多线程操作,var worker1 = new Worker("worker1.js")通过以下语句来实现多线程操作,顾名思义,多线程就类似于一个老板请了多名员工一起做事肯定效率是远远高于一个员工,虽然是我们的js可能是一个高级的员工会做很多事情,但是毕竟是一个人,尤其是在做一些简单的事情的时候,单线程只有劣势没有优势(可能过于绝对,主观感觉),尤其是我写的这种低级的脚本语言,更需要多线程执行,于是我就想用多线程来爬取数据,大大缩短了时间成本,我不用啥啥的看着他在那执行了,于是我开始在nodejs中使用webworker实现多线程的操作,以下是实现步骤:

NodeJs中使用Webworker实现多线程:

首先,我们需要通过npm i worker 安装依赖,也就是在node_modules中导入模块,然后通过引入

const Worker = require("worker"),我们就可以开始使用他了,

var worker1 = new Worker("worker1.js")

var worker2 = new Worker("worker2.js")

var worker3 = new Worker("worker3.js")

var worker4 = new Worker("worker4.js")

这里我创建了4个线程帮助我实现爬取数据,也就相当于我雇了四个员工咯!

我将需要爬取的数据四等分交给了四个员工,他们每人负责一个部分,接下来有一个需要注意的点,我在对应的脚本中

const {delay} = require("bluebird");

const Promise = require("bluebird");

const ms = require("ms");

引入了以下几个模块,在定义他们之前需要通过npm i 命令分别安装他们,npm i +require括号里面的名称即可

为什么需要这部呢?

因为我需要用到这个await delay(ms("10s"));,这个需要写在async方法中,不然会报错,这个可以理解成我将每个线程分开执行,我为他们设置了一个延迟,这样可以避免一个高并发(不知道这样说合理不合理),因为我开始不设置启动直接程序崩溃了,所以需要设置这个。

最后worker1中使用的就是需要调用的脚本,记得将他们分段噢,提醒一个注意点是Worker是大写的W。

猜你喜欢

转载自blog.csdn.net/weixin_54515240/article/details/129047758