node.js特点描述

node.js的特点一之单线程

node.js的特点之一就是与javascript的运行机制一样,都是单线程运行。
在Java,php,.net等服务器语言中,会为每个客户端连接创建一个进程,而每个进程需要2MB的内存,也就是说,在一个系统8G的内存中,最多可以运行4000个左右的进程,相当于可以同时连接最大用户数为4000个左右,那应用程序需要支持更多的用户连接数,就要增加服务器的数量,所以web应用程序的成本就上升了。
node.js不为每一个客户连接创建一个新的进程,而仅仅使用一个线程,当有用户连接了,就触发一个内部事件,通过非阻塞I/O,事件驱动机制,让node.js在宏观上也是并行的,那么使用nodejs,在同样的8G内存中,就可以同时处理超过4万用户的连接。
另外,单线程带来的好处,还有操作系统完全不再有线程创建,销毁的事件开销。
不管有多少用户,只有这一个线程进行处理,所以nodejs适合做一些I/O比较多的项目。

const http = require("http");

var a = 0;

const server = http.createServer((req,res)=>{
	a++;
	//获取访问者的ip地址
	//console.log(req.connection.remoteAddress);
	res.setHeader("Content-Type","text/html;charset=UTF-8");
	//end()中必须是字符串
	res.end(a.toString());
});

server.listen(3000);
console.log("success");

启动这个代码,在浏览器中运行,每次刷新的时候,发现该数值不会从0开始。
而是1,3,5,7…

其实,nodejs拥有JavaScript所有的核心语法,甚至拥有所有es6(es2016)的新语法。
比如说:

const http = require("http");
const server = http.createServer((req,res)=>{
	res.setHeader("Content-Type","text/html;charset=UTF-8");
	var num = parseInt(Math.random() * 10000);
	if(num == 6666){
	 throw new Error("程序出错了");
	}
	//end()中必须是字符串
	res.end(a.toString());
});

server.listen(3000);
console.log("success");

当有一个用户刷到6666,就会报错停止执行,后面的用户以及之前的用户再次访问就访问不到了,这也说明nodejs是单线程运行机制的。

nodejs特点之异步I/O,事件驱动

const http = require("http");
//文件模块
const fs = require("fs");

const server = http.createServer((req,res)=>{
	//读取文件,注意index.txt文件内容得是utf-8编码格式。
	fs.readFile('./index.txt',function(err,content){
		res.setHeader("Content-Type","text/html;charset=UTF-8");
		//end()中必须是字符串
		res.end(content);
	});
});

server.listen(3000);
console.log("success");

这就看出来nodejs中都是异步操作,用户前来访问去取文件,并不会阻塞,还是异步处理,等待处理结果返回。
阻塞模式下,一个线程只能处理一个任务。非阻塞模式下,一个线程永远在执行计算操作,这个线程的cpu利用率就是100%。

只要I/O越多,nodejs宏观上越并行,但是node不适合计算繁重的业务,因为计算过程中,cpu只能为某一个用户服务,难以脱身,所以nodejs线程就被这一个用户霸占了

nodejs中单线程并行与多线程并行例图:
所以,单线程,一个线程并行所有的计算业务。
在这里插入图片描述
nodejs的事件驱动
事件驱动是nodejs的底层机制,nodejs之所以不会执行出错,就是应为有个事件驱动,也称为:事件环。

额外补充:
nodejs的适合做的项目:
1:用户表单收集
2:考试系统
3:打分系统
4:聊天室
5:图文直播
6:提供json的API

当然nodejs无法跳转老牌语言php,java等。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值