Node.js 基础知识

Node.Js简介


说起node,主要特点是

  • 单线程
  • 非阻塞
  • 事件驱动

在更复杂的层面上来看

  • node是js的一个运行环境(解释器);
  • node依赖于Chrome V8引擎进行代码解释(高效)。

异步I/0

在学习node之前,我们的ajax,还有曾经使用多次的addeventlistener函数,定时器函数等等,都在使用所谓的异步。异步是相对于同步(按照顺序一件一件执行)来讲的概念

很早,异步就存在于操作系统的底层·,但是在绝大多数高级语言中,异步并不常见…
在众多高级编程语言或运行平台中,将异步作为主要编程方式和设计理念的,Node是首个。

那么我们使用异步的原因是什么呢?

首先是用户体验。采用异步请求,在下载资源期间,用户无论是视觉上的页面效果,还是手动的交互体验都得以继续响应。

//同步进行
getData1('from A')  //消耗时间M
getData2('from B')  //消耗时间N


//异步进行
getData1('from A',function(result){
//消耗时间M
})
getData2('from B',function(result){
//消耗时间N
})

//前者耗时M+N,后者为max(M,N)。后端的快速响应才能使前端的体验变得更好

其次是资源分配:

如果有一组互不相干的任务。主流方法有

  • 单线程依次执行(同步)
    更符合编程人员顺序思考的思维方式,逻辑层面会更通顺。但是缺点也很明确,同步操作非常容易造成I/O(文件读写,网络请求)阻塞。同时造成资源浪费;
  • 多线程并发 1 完成(异步)
    创建线程,在多核CPU的利用率方面一定是有其优势的,但是执行器上下文的切换,还有创建本身就是很大的开销。当然还有无法忽视的线程安全问题,比如各个地方都要考虑lock,还有状态的同步等等问题。
    所以node在两者之间给出了更好的答案:利用异步I/O:让单线程远离阻塞

事件循环

这是Node自身的执行模型,他使得回调函数普遍使用。本身其内部有一个类似while(1)循环,每执行一次循环都成为tick(process.nextTick函数还记得吗?不记得没事,后续文章会讲解),每个tick的过程都是查看是否还有事件待处理,有的话就取出事件和相关回调函数。在此过程中,不会影响主线程的解析执行。

有点理解了?
后面会继续探讨,后续我会加上链接。欢迎指正。


  1. 在操作系统中,并发是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。 ↩︎

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值