美文网首页
Nodejs高并发的疑问

Nodejs高并发的疑问

作者: 小峰哈 | 来源:发表于2019-03-28 15:17 被阅读0次

在CNode社区上看到了一个问题,高并发的疑问
对自己对Node的理解有帮助,总结一下

我把代码改了一下

var http = require('http')
var fs = require('fs');

var app = http.createServer(function (req, res) {
    if (req.url === '/a') {
        // 斐波拉契函数
        function fib(n) {
            if (n === 0) return 0;
            else if (n === 1) return 1;
            else return fib(n - 1) + fib(n - 2)
        }
        setTimeout(() => {
            // fs.readFile('./test.txt', 'utf8', (err, value) => {
            //     if (err) {
            //         res.end(err);
            //     }
            //     res.end(value);
            // })
            const a = fib(44)
            res.end(JSON.stringify(a));
        }, 0);
        // fib(44) // 执行时间要 10s 左右
        // res.end('a is ' + new Date())
    } else if (req.url === '/b') {
        res.end('b is ' + new Date())
    }
})

app.listen(3600, function () {
    console.log('服务已启动')
});

即便加上了一个异步的壳子,但是由于fib函数是CPU密集型的,在接到/b的请求后,任务被放到Node事件队列里,继续执行主线程的程序,CPU还被fib函数占着,所以不能立即处理/b请求,要等到主线程的程序执行完成之后再执行。

但是如果将fib函数换成io操作,io异步操作的时候不占用CPU,/b的请求就可以很快处理。

相关文章

网友评论

      本文标题:Nodejs高并发的疑问

      本文链接:https://www.haomeiwen.com/subject/rawqbqtx.html