返回顶部
首页 > 资讯 > 精选 >Nodejs怎么进行多线程处理
  • 478
分享到

Nodejs怎么进行多线程处理

2023-06-15 08:06:13 478人浏览 薄情痞子
摘要

这篇文章主要介绍nodejs怎么进行多线程处理,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Threads à Gogo 是nodejs 的原生模块,使用这个模块可以让nodejs 具备多线程处理功能。【推荐学习:《

这篇文章主要介绍nodejs怎么进行多线程处理,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

Threads à Gogo 是nodejs 的原生模块,使用这个模块可以让nodejs 具备多线程处理功能。【推荐学习:《nodejs 教程》】

安装方法

npm install threads_a_gogo

下载测试源码

git clone Http://GitHub.com/xk/node-threads-a-gogo.git  

导入模块代码

var tagg= require('threads_a_gogo');

API

tagg= require('threads_a_gogo') //生成tagg objectvar thread = tagg.create(  ) //生成 thread objectvar thread_pool = tagg.createPool( numberOfThreads ) //生成 thread poolthread.load("boot.js").eval("boot()").emit("go").on("event", cb) //thread读取boot.js文件 执行boot(),发送event go,并且监听 event 事件 cb(err,result)thread_pool.load('path') //pool中的任意(.all 为全部)thread 读取path filepool.any.eval( program, cb ) //pool中的任意(.all 为全部)thread执行program

为什么要用多线程?

平行执行,无需排队,快速。

公平性,所有线程统一优先级。

完整利用资源,让更多的CPU参与task的处理。

所有线程共用一个储存地址。

实例

我们先来做一个简单的测试,用斐波那契数组来看一下,加入了多线程的node有多么的强悍:(测试机器为4CPU)没有使用TAGG的正常情况,异步也帮不了我们应对cpu密集型任务

function fibo (n) {return n > 1 ? fibo(n - 1) + fibo(n - 2) : 1;}var n=8function back(){if(!--n) return console.timeEnd('no thread');}console.time('no thread');process.nextTick(function(){console.log(fibo (40));back();})process.nextTick(function(){console.log(fibo (40));back();})process.nextTick(function(){console.log(fibo (40));back();})process.nextTick(function(){console.log(fibo (40));back();})process.nextTick(function(){console.log(fibo (40));back();})process.nextTick(function(){console.log(fibo (40));back();})process.nextTick(function(){console.log(fibo (40));back();})process.nextTick(function(){console.log(fibo (40));back();})

我们模拟了8个异步的行为,测试用的node v0.8.16版本,所以process.nextTick还是异步方法。最后我们输出结果为:

165580141165580141165580141165580141165580141165580141165580141165580141no thread: 23346ms

接下来我们使用TAGG模块来测试同样的执行8次斐波那契数组计算,看看成绩如何?

function fibo (n) {return n > 1 ? fibo(n - 1) + fibo(n - 2) : 1;}console.time('8 thread');var numThreads= 8; //创建线程池,最大数为8var threadPool= require('threads_a_gogo').createPool(numThreads).all.eval(fibo); //为线程池注册程序var i=8;var cb = function(err,data){ //注册线程执行完毕的回调函数console.log(data);if(!--i){threadPool.destroy();console.timeEnd('8 thread');}}threadPool.any.eval('fibo(40)', cb); //开始向线程池中执行fibo(40)这个任务 threadPool.any.eval('fibo(40)', cb); threadPool.any.eval('fibo(40)', cb); threadPool.any.eval('fibo(40)', cb); threadPool.any.eval('fibo(40)', cb); threadPool.any.eval('fibo(40)', cb); threadPool.any.eval('fibo(40)', cb); threadPool.any.eval('fibo(40)', cb);

最重的结果:

1655801411655801411655801411655801411655801411655801411655801411655801418 thread: 9510ms

相比不使用多线程模型的node,使用了TAGG模块之后,我们在4CPU服务器上的测试结果要快上一倍还不止。

TAGG模块还有其他更多的功能,比如事件触发,平滑退出,查看线程工作状态等等,总之TAGG模块给node注入了新的活力,让node一直饱受诟病的处理cpu密集任务问题得到了一个妥善的解决,就算你不擅长c++代码,也能够轻松编写出多线程的真正的非阻塞node程序了。  

以上是“Nodejs怎么进行多线程处理”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

本文标题: Nodejs怎么进行多线程处理

本文链接: https://lsjlt.com/news/279165.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Nodejs怎么进行多线程处理
    这篇文章主要介绍Nodejs怎么进行多线程处理,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Threads à gogo 是nodejs 的原生模块,使用这个模块可以让nodejs 具备多线程处理功能。【推荐学习:《...
    99+
    2023-06-15
  • 怎么对java多线程数据进行分页处理
    怎么对java多线程数据进行分页处理?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。常用的java框架有哪些1.SpringMVC,Spring Web MVC是...
    99+
    2023-06-14
  • Nodejs中怎么对错误进行处理
    今天就跟大家聊聊有关Nodejs中怎么对错误进行处理,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。假设我们有以下代码const net&n...
    99+
    2024-04-02
  • Node.js如何使用worker_threads多线程进行并行处理
    这篇文章给大家分享的是有关Node.js如何使用worker_threads多线程进行并行处理的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。很多人似乎都无法理解单线程 NodeJ...
    99+
    2024-04-02
  • Lua中怎么进行多线程编程
    在Lua中进行多线程编程可以使用Lua的Coroutine特性来实现。Coroutine是一种协作式多任务处理方式,可以模拟多线程的...
    99+
    2024-04-09
    Lua
  • php怎么处理多线程
    在PHP中,处理多线程可以使用以下几种方式:1. 使用多进程:PHP可以通过`pcntl_fork`函数创建子进程,每个子进程可以执...
    99+
    2023-08-23
    php
  • Nodejs中怎么实现多线程
    Nodejs中怎么实现多线程,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1 背景需求中有以下场景1 对称解密、非对称解密2 压缩、解压3...
    99+
    2024-04-02
  • 使用nodejs怎么对tcp连接进行处理
    今天就跟大家聊聊有关使用nodejs怎么对tcp连接进行处理,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。int uv_tcp_listen(uv_tcp_t* ...
    99+
    2023-06-06
  • 批处理程序中多线程怎么处理
    这篇文章主要为大家展示了“批处理程序中多线程怎么处理”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“批处理程序中多线程怎么处理”这篇文章吧。如下内容将简单举例,在WINDOWS下使用批处理做多进程...
    99+
    2023-06-09
  • java中多线程怎么进行通信
    今天就跟大家聊聊有关java中多线程怎么进行通信,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、概要线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体,线...
    99+
    2023-05-31
    java 多线程通信 ava
  • SpringBoot多线程进行异步请求的处理方式
    目录SpringBoot多线程进行异步请求的处理第一步:编写配置类第二步:对方法使用注解标注为使用多线程进行处理SpringBoot请求线程优化使用Callable来实现1、异步调用...
    99+
    2024-04-02
  • Java中怎么处理多线程
    本篇文章为大家展示了Java中怎么处理多线程,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。当每个迭代彼此独立,并且完成循环体中每个迭代的工作,意义都足够重大,足以弥补管理一个新任务的开销时,这个顺序...
    99+
    2023-06-17
  • NodeJs中怎么对数据库异常进行处理
    NodeJs中怎么对数据库异常进行处理,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。数据库链接错误使用nodejs处理异常最麻...
    99+
    2024-04-02
  • 在Java子线程中怎么对异常进行处理
    这篇文章给大家介绍在Java子线程中怎么对异常进行处理,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。常见错误也许有人会觉得,很简单嘛,直接在父线程启动子线程的地方try ... catch一把就可以了,其实这是不对的。...
    99+
    2023-05-31
    java 子线程 ava
  • 怎么进行从库MTS多线程并行回放
    今天就跟大家聊聊有关怎么进行从库MTS多线程并行回放,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、综述与单SQL线程的回放不同,MTS包含多个工...
    99+
    2024-04-02
  • c#多线程怎么处理多个数据
    处理多个数据的多线程方法有多种,以下是其中的一些常见方法:1. 并行循环:使用Parallel类的For、ForEach或Invok...
    99+
    2023-08-18
    c#
  • 怎么在Java中对多线程进行排序
    怎么在Java中对多线程进行排序?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面向...
    99+
    2023-06-14
  • LINUX怎么实现多线程进行cp复制
    这篇文章主要为大家展示了“LINUX怎么实现多线程进行cp复制”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“LINUX怎么实现多线程进行cp复制”这篇文章吧。关于这个问题,意义虽然有限因为一般来...
    99+
    2023-06-04
  • Android 多线程处理之多线程详解
    handler.post(r)其实这样并不会新起线程,只是执行的runnable里的run()方法,却没有执行start()方法,所以runnable走的还是UI线程。 1.如...
    99+
    2022-06-06
    多线程 线程 Android
  • 利用Hadoop怎么对多Job进行并行处理
    利用Hadoop怎么对多Job进行并行处理?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。首先做如下配置:修改mapred-site.xml添加调度器配置:<propert...
    99+
    2023-05-30
    hadoop job
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作