node.js“多线程”如何处理高并发任务?


当前第2页 返回上一页

在上面的代码中,创建了一个长度为 max 最大并发数长度的数组,数组里放了对应数量的异步任务。然后使用 Promise.all 同时执行这些异步任务,当单个异步任务执行完成时,会在任务池取出一个新的异步任务继续执行,完成了效率最大化。

接下来,我们用下面这段代码进行执行测试(代码实现如下)

1

2

3

4

5

6

7

(async () => {

  const requestFnList = new Array(100)

    .fill("6909002738705629198")

    .map((id) => () => singleRequest(id));

 

  const reply = await concurrentRun(requestFnList, 10, "请求掘金文章");

})();

最终执行结果如下图所示:

1.jpg

到这里,我们的并发请求就完成啦!接下来我们分别来测试一下不同并发的速度吧~ 首先是 1 个并发,也就是没有并发(如下图)

2.jpg

耗时 11.462 秒!当不使用并发时,任务耗时非常长,接下来我们看看在其他并发数的情况下耗时(如下图)

3.jpg

4.jpg

5.jpg

6.jpg

从上图可以看出,随着我们并发数的提高,任务执行速度越来越快!这就是高并发的优势,可以在某些情况下提升数倍乃至数十倍的效率!

我们仔细看看上面的耗时会发现,随着并发数的增加,耗时还是会有一个阈值,不能完全呈倍数增加。这是因为 Node 实际上并没有为每一个任务开一个线程进行处理,而只是为异步 I/O 任务开启了新的线程。所以,Node 比较适合处理 I/O 密集型任务,并不适合 CPU(计算)密集型任务。

到这里,我们的使用 Node “多线程”处理高并发任务就介绍完了。如果想要程序完善一点的话,还需要考虑到任务超时时间、容错机制,大家感兴趣的可以自己实现一下。

更多编程相关知识,请访问:编程入门!!

以上就是node.js“多线程”如何处理高并发任务?的详细内容,更多文章请关注木庄网络博客

返回前面的内容

相关阅读 >>

javascript采用什么方式继承

jquery实现带弹窗和次数的转盘抽奖(代码)

了解一下node.js中的文件夹写入

javascript中const和object.freeze()的差异

js中isnan和number.isnan的区别是什么

怎么检查javascript语法错误

ie中javascript错误有哪些

javascript中this什么意思

如何自定义video播放器样式?

简述javascript如何创建数组

更多相关阅读请进入《javascript》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...

    暂无评论...