node语言的见解

第一次写博客,还是处于新手的状态,如写得有问题,请斧正!!

node语言的见解

1.js异步单线程在Node中的实现:利用系统线程池

Node采用Chrome V8引擎处理JavaScript脚本,V8最大的特点就是单线程运行,一次只能运行一个任务,代码从上到下按顺序执行

Node大量采用异步操作,即任务不是马上执行,而是插在任务队列的尾部,等到前面的任务运行完后再执行

传统的开发方式大部分都是IO阻塞的,例如读文件,都是读取完毕才能进行下一步操作,所以需要多线程来更好的利用硬件资源,所以有时候会给人带来一种错觉:线程越多越好

异步IO也叫非阻塞IO,就是Node的callback,不会影响下一步操作,等到文件读取完毕,回调函数自动被执行。而不是在等待。

2.IO优势

  • 对于文件读写,Node采用的是非阻塞IO
  • 传统IO在读写文件的时候CPU来处理,而代码执行也处于等待中,浪费性能
  • 非阻塞IO将读写操作交给CPU,而代码正常执行,减少等待浪费的性能

3.应用的场景

  • 实际应用: webpack/gulp/npm/http-server/json-server
  • 服务器中负责IO读写的中间层服务器(天猫中间层IO服务器)

4.异步编程带来的难题:

  • 异常处理:异步I/O包含两个阶段,提交请求和处理结果,这两个阶段中有事件循环的调度,两者彼此不关联。异步方法通常在第一个阶段提交请求后立即返回,因为异常并不一定发生在这个阶段,try/catch在此处不会发挥任何作用

  • 函数嵌套过深 {{{{{{{{{{

  • 多线程只是异步的一种实现手段而已,并不代表,实现异步都需要多线程。多线程编程时需要面临

    开发人员要面临跨线程通信编程
    child_process
    cluster

5.node.js中的异步IO操作和异步非IO操作 API

  • 异步IO API
    操作文件
    网络请求
  • 异步非IO
    API (原理同异步IO稍有不同,并没有开启新线程,js中是先把主任务(代码任务)执行完毕,然后再去执行下面两个方法中的代码)
    setTimeout
    setInterval

6.JS的单线程异步的实现

js是单线程,这里的单线程仅仅只能说明JavaScript执行在单线程中,js选择了成为单线程的语言,所以它本身不可能是异步的,但js的宿主环境(比如浏览器,Node的Chrome V8)是多线程的,宿主环境通过某种方式(事件驱动模型[1])使得js具备了异步的属性。js的单线程异步,其实本质上还是多线程来实现的。

参考链接: link.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值