正常实现
const express = require('express')
console.log('Spawn http server')
const app = express()
function fibonacci(n) {
if (n < 0) throw new Error('输入的数字不能小于0');
if (n == 1 || n == 2) {
return 1;
} else {
return fibonacci(n - 1) + fibonacci(n - 2);
}
}
app.get('/hello', (req, res) => {
res.json({ msg: 'hello world' })
})
app.get('/compute', (req, res) => {
console.time('compute')
const msg = fibonacci(30)
console.timeEnd('compute')
res.json({ msg: msg })
})
app.listen(3000)
多线程实现
const express = require('express')
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({ msg: 'hello world' })
})
app.get('/compute', (req, res) => {
console.time('compute')
const num = req.query.num;
const woker = new Worker(__filename, { workerData: null })
woker.postMessage({ num })
woker.on('message', (msg) => {
console.log(msg)
console.timeEnd('compute')
res.json({ msg: msg })
})
})
app.listen(3000)
} else {
function fibonacci(n) {
if (n < 0) throw new Error('输入的数字不能小于0');
if (n == 1 || n == 2) {
return 1;
} else {
return fibonacci(n - 1) + fibonacci(n - 2);
}
}
parentPort.on('message', (msg) => {
parentPort.postMessage({ result: fibonacci(msg.num) })
})
}
多线程作用
多线程可以在主线程之外同步进行工作 所以子线程是在主线程之外可以同时计算,不会阻塞主线程的响应
问题: 因为斐波那契数列计算很耗时,不管是主线程还是子线程都很久,想要响应结果只能等待,还是阻塞了。 如何对多线程的代码进行优化使其不阻塞。
所以就看不到多线程的价值所在