Node.js

创始人:Ryan Dahl

运行时引擎 :Google  V8开源

JavaScript语言编写 原因:单线程异步

最大的优势是借助JavaScript天生的事件驱动机制加V8高性能引擎,使编写高性能Web服务,通过模块化的JavaScript代码,加上函数式编程,并且无需考虑浏览器兼容性问题,直接使用最新的ECMAScript 6标准,可以完全满足工程上的需求。

优点:

1.采用事件驱动,异步编程,为网络服务而设计

2.node.js异步非阻塞模式的IO处理给node.js带来 在相对较低的资源消耗下  高性能与出众的负载能力

3.node.js轻量高效  时数据密集型实时应用系统的完美解决方法  

4.适合前段工程师上手

缺点:

1.单线程,单进程 单核cup  不能充分利用多核cpu服务器

2.对程序员要求高   一旦进程崩溃  整个web服务器就会崩溃

3.不适合做复杂性很高的运算

4.Nodejs的社区在壮大,不仅包的数量在快速增加,而且包的质量也要明显好于其他语言的。

解决方案  

1.多进程绑定同一个端口   进程间发送 '文件句柄' 功能

2. 多进程绑定不同端口, 反向代理服务器 Nginx 做负载代理 引入间接层

关于'文本句柄':

Linux系统中  ,每当进程打开一个文件时,系统就会为其分配一个唯一的整形文本描述符,用来标识这个文件.标准输入,标准输出,标准错误   flie结构指针表示是哪个文本描述符 0,1,2

关于 同步-异步-阻塞-非阻塞:

同步包括 阻塞  非阻塞,  异步 只有非阻塞

阻塞:调用之后一定要等到系统内核层面完成所有事件操作后, 调用才结束.

非阻塞:非阻塞 I/O 和阻塞 I/O 的差别为调用之后会立即返回.

同步 :在未返回结果前一直请求 直到有了返回结果,期间做不了别的事情 (read)(select 进程短暂阻塞)(epoll事情提交后休眠 结果产生后唤醒)  

异步:触发事件后可以做别的事情,事情完成通知你 

请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕

Node.js事件循环机制:

194214_uFlH_2887571.png194338_RUBM_2887571.png

195332_rKrF_2887571.png

http://www.tuicool.com/articles/3QBRzm

从事件循环开始   javaScript是函数式编程,异步调用回调函数,在回调函数(可能会有emit事件 IO请求等)中注册回调函数,回调函数中因为可能会有其他的事件,所以可能不会先去执行.

打开某个东西  首先要于其建立链接

事件循环 会检测队列还有没有未处理的事件,如果没有则会结束程序

一个 JavaScript 运行时包含了一个待处理的消息队列。每一个消息都与一个函数相关联。当栈为空时,从队列中取出一个消息进行处理。这个处理过程包含了调用与这个消息相关联的函数(以及因而创建了一个初始堆栈帧)。当栈再次为空的时候,也就意味着消息处理结束。

Node.js架构:

Node.js是一个基于Chrome V8引擎的javascript的运行环境,其使用了事件驱动,非阻塞I/O模型,非常轻便高效

201740_MrxD_2887571.png

主要分为三层,应用app >> V8及node内置架构 >> 操作系统. V8是node运行的环境,可以理解为node虚拟机.node内置架构又可分为三层: 核心模块(javascript实现) >> c++绑定 >> libuv + CAes + http.

 

转载于:https://my.oschina.net/qjxiongba/blog/1058110

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值