node.js特点描述
发布日期:2021-10-15 18:54:40 浏览次数:8 分类:技术文章

本文共 1961 字,大约阅读时间需要 6 分钟。

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等。

转载地址:https://blog.csdn.net/shenshulong/article/details/104119605 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:webpack插件之extract-text-webpack-plugin
下一篇:php如何启动内置web服务器

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月19日 00时58分33秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章