介绍一个多线程的库
发布于 7 年前 作者 classfellow 4971 次浏览 来自 分享

介绍主角之前,先说说web端的多线程技术——web worker。web worker 的特点是 Web Worker无法访问DOM节点; Web Worker无法访问全局变量或是全局函数; Web Worker无法调用alert()或者confirm之类的函数; Web Worker无法访问window、document之类的浏览器全局变量; 基本上,就是运行纯 js 代码。

muti-thread 就是这样一个技术,是运行在node服务端环境。它是真正的多线程,可以将计算型的代码统统交给其他线程跑,主线程就会解放出来。

可以使用 webpack ,将代码打包到一个文件里,muti-thread 加载这个文件,用创建的新线程运行里面的函数。运行在多线程的代码,不能调用 node 提供的原生模块。这样,js 代码就是生产力,委托线程运行函数的时候向它传递的参数,就是生产资料。线程里面的函数计算完之后,会把结果交给主线程,就是产品交付。整个使用过程就像异步函数调用一样。

'use strict'

const co = require('co')
const Thread = require('muti-thread').Thread
const randomstring = require('randomstring')
const path = require('path')

// create a new thread
var thread = new Thread(path.join(__dirname, 'test', 'out', 'export.js'))

co(function* () {
  for(;;) {
    var good = randomstring.generate(1000)
    var bad = randomstring.generate(1000)
	// 委托新创建的线程执行 fastDiff
    var r = yield thread.execute('fastDiff', new Buffer(good), new Buffer(bad))
  }
})

机器学习和深度神经网络已经有了 js 实现,类似于这些计算型任务,这么解决,再也不要说js不适合这些领域了。 运行 npm install muti-thread 尝试一下吧

7 回复

node-webworker-threads,这个库表现得更好,还有线程池和监听事件支持,并支持require

来自酷炫的 CNodeMD

请问你怎么插入的代码?另外背景色怎么调?

@lovegnep 去看看 Mardown 语法

@lovegnep 社区编辑器支持部分markdown语法,建议去了解一下,学习成本低但是很有用

来自酷炫的 CNodeMD

这个是lz自己写的库啊,c++部分简直强大,有些模块复用的是chromium的,真心佩服。c++功底真的很深,我现在正在学习你的这个工具,尝试下深入到底层插件。 还有问题的话得请教你啊

先收藏再试用

来自酷炫的 CNodeMD

最近发多线程库的有点多啊!要和他们竞争可能压力有点大。 比如 Microsoft/napajs

来自酷炫的 CNodeMD

回到顶部