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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2024年04月19日 00时58分33秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Word2vec与logging模块_完整代码_CodingPark编程公园
2019-04-26
Auto-Encoder&VAE_完整代码_CodingPark编程公园
2019-04-26
Debug讲解_CodingPark编程公园
2019-04-26
命名实体识别_利用CRF_CodingPark编程公园
2019-04-26
Pycharm使用-取消pytest的办法_CodingPark编程公园
2019-04-26
OpenCV图像处理基础_CodingPark编程公园
2019-04-26
生成个性二维码_CodingPark编程公园
2019-04-26
读txt文件报错_CodingPark编程公园
2019-04-26
文件读&写_Python_CodingPark编程公园
2019-04-26
list与str的转换&list嵌套问题_CodingPark编程公园
2019-04-26
Gensim库生成与导入W2V模型_CodingPark编程公园
2019-04-26
cmd命令行实用技巧_CodingPark编程公园
2019-04-26
数据可视化与文本分类_CodingPark编程公园
2019-04-26
数据分析之数据可视化_CodingPark编程公园
2019-04-26
隐马尔可夫模型的样本生成&模型训练&预测_CodingPark编程公园
2019-04-26