node处理机制,并发性测试

时间:2022-06-08
本文章向大家介绍node处理机制,并发性测试,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

开始学node就了解到三大特点单线程,非阻塞I/O,事件驱动!

下面一个案例看一下非阻塞I/O处理机制,更好了解到node机制!其实三个特点就是一个事情,擅长I/O,擅长任务调度!

案例

//了解node的处理机制,擅长I/O,单线程高并发处理机制
const http=require("http");
const fs=require("fs");
//    产生一个5位随机数(用户id)
// console.log(1)
const server=http.createServer(function(req,res){
    //禁用ico图标的请求
    if(req.url=="/favicon.ico"){
        return ;
    }
    res.writeHead(200,{"Content-Type":"text/plain;charset=utf8"})
    var uid=parseInt(Math.random()*89999)+10000;
    console.log("欢迎用户id:"+uid)
    //异步读取文件
    fs.readFile("./read.txt",{"charset":"utf8"},function(err,data){
        if(err){
            res.end("文件读取失败");
            throw err;
        }else{
            console.log("用户id:"+uid+"读取文件完成");
            // console.log(2)

            res.end();
        }
    })
    // console.log(3)
    // res.end("中文");
})
server.listen(3001,"127.0.0.1");

查看一下console.log的运行顺序

发现结果并不是从上到下1,2,3执行!

原因剖析!

说过node的非阻塞I/O,正常运行,有新的并发过来,继续调度排队,调度完成后继续刚才的排队任务!

下面附上一张高并发的图

发现并不一个个人执行的工作完成后继续下一个,而是在同一时间进行任务调度,调度完成后,进行刚才排队序列继续执行!(善于调度,不善于计算),如果排序的是计算任务,则不能进行调度!