Node学习 -- 入门简介

本文介绍了Node.js的关键特性,包括异步I/O、事件与回调函数、单线程模型及其带来的优势与挑战,以及如何通过子进程解决计算密集型任务。同时,文章还探讨了Node.js的跨平台特性和适用的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Node的特点

1、异步I/O

例如,在Node中读取文件,与前端的Ajax调用方式非常类似:

var fs = require('fs');
fs.readFile('/path', function (err, file) { c
    onsole.log('读取文件完成')
}); 
console.log('发起读取文件');

2、事件与回调函数

在JS中,函数是一等公民,回调函数无处不在。回调函数是Node中最好的接受异步调用返回数据的方式。

下面这个栗子,展示的是Ajax异步提交的服务器端处理过程。

var http = require('http');
var querystring = require('querystring');
//侦听服务器的request事件 
http.createServer(function (req, res) {
    var postData = ''; 
    req.setEncoding('utf8');
    //侦听请求的data事件 
    req.on('data', function (trunk) {
        postData += trunk; 
    });
    //侦听请求的end事件 
    req.on('end', function () {
        res.end(postData); 
    });
}).listen(8080);
console.log('服务器启动完成');

3、单线程

Node保持了单线程的特点。单线程最大的好处是不用像多线程那样处处在意状态同步的问题,没有死锁问题,也没有线程上下文交换所带来的性能上的开销。

但是,单线程也有弱点:
1. 无法利用多核CPU
2. 错误会引起整个应用退出,因此应用的健壮性值得考验
3. 大量计算占用CPU导致无法继续调用异步I/O
积极面对这些弱点,可以避免潜在的问题,使其得以更高效的利用。

对于第三条的解决方案:
HTML5定制了Web Workers的标准,它能够创建工作线程来进行计算,以解决JS大计算阻塞UI渲染的问题。工作线程为了不阻塞住线程,通过消息传递的方式来传递运行结果,这也使得工作线程不能访问到主线程的UI。

Node使用了与WebWorkers相同的思路来解决单线程中大计算量的问题:child_process

子进程的出现,意味着Node可以从容的应对单线程在健壮性和无法利用多核CPU方面的问题。通过将计算分发到各个子进程,可以将大量的计算分解掉,然后再通过进程之间的消息来传递结果,这可以很好的保持应用模型的简单和低依赖。通过Master-Worker的管理方式,也可以很好的管理各个工作进程,以达到更高的健壮性。

4、跨平台

Node的应用场景

1、I/O密集
2、CPU密集
3、和遗留的系统和平共处
4、分布式应用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值