Node.js 总算要支援多执行绪(Multi-Threading) 了

前言

Node.js 最令人诟病的技术债就是它只支援单执行绪,必须透过各种手段才能达到类似的功能,可参考[这一篇]
(https://itnext.io/multi-threading-and-multi-process-in-node-js-ffa5bb5cde98),但是,程式就变得複杂许多了,今天,看到 Node.js 的头头 Adam Polak 宣布新版v12将支援 Multi-Threading,兴奋之余,忍不住跟大家分享一下,原文请参考这里。

测试

先写一个测试程式,取名 app.js,如下:

const express = require('express');const fs = require('fs');const app = express();app.get('/', (req, res) => {  res.json({    message: 'Hello world!'  })});app.get('/compute', (req, res) => {  let json = {};  for (let i=0;i<100000;i++) {}  res.json({    message: 'done'  })});app.listen(3000);
安装express套件
npm install express -save执行 node app.js打开浏览器,在两个页籤分别输入
http://localhost:3000/compute
http://localhost:3000/

可以看到第一个页籤执行完毕后,才会执行第二个页籤,表示Node.js只支援单执行绪。

v12 将提供的作法如下:

const express = require('express');const fs = require('fs');const { Worker, isMainThread, parentPort, workerData } = require('worker_threads');if (isMainThread) {  console.log("Spawn http server");  const app = express();  app.get('/hello', (req, res) => {    res.json({      message: 'Hello world!'    })  });  app.get('/compute', (req, res) => {    const worker = new Worker(__filename, {workerData: null});    worker.on('message', (msg) => {      res.json({        message: 'done'      });    })    worker.on('error', console.error);  worker.on('exit', (code) => {if(code != 0)          console.error(new Error(`Worker stopped with exit code ${code}`))    });  });  app.listen(3000);} else {  let json = {};  for (let i=0;i<100;i++) {    json = JSON.parse(fs.readFileSync('./big-file.json', 'utf8'));  }  json.data.sort((a, b) => a.index - b.index);  parentPort.postMessage({});}

主要加了两行:

引进 worker_threads 套件。
const { Worker, isMainThread, parentPort, workerData } = require('worker_threads');
『compute』 handler 使用 Worker 为每一次的request产生新执行绪。
const worker = new Worker(__filename, {workerData: null});

其他新功能

除了支援多执行绪(Multi-Threading)外,另外还有以下新功能:

提供 N-API,支援内嵌 C/C++/Rust 程式。支援 HTTP/2。

结语

看到文章后,兴沖沖的準备安装新版测试一下,一看网站,目前能只能下载 v10,傻眼了,只能相信作者所言,Coming soon...。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章