对Node的深刻认知

node.js是JavaScript的运行环境,或者说是web开发的runtime。

总的介绍

  • 事件驱动
  • 非阻塞I/O
  • 基于Chrome V8引擎
  • 单线程
  • 使用 JavaScript 开发后端代码

优点

  • 事件驱动
  • 非阻塞I/O
  • 前端开发工程师偏爱

Node适合干什么

适合I/O密集场景

CPU 密集和 I/O密集的区别

  • CPU密集:压缩、解压、加密、解密
  • I/O密集:文件操作、网络操作、数据库

I/O密集场景有哪些

  • 文件操作
  • 网络操作
  • 数据库

为什么非常适合Web

因为web常见场景基本都是I/O密集场景

  • 静态资源读取
  • 数据库操作
  • 渲染页面
非阻塞I/O

当执行I/O操作时,计算机会调用底层的命令来执行I/O操作,期间程序【cpu】就会等待底层命令返回结果,拿到结果后,才能执行下一条指令。

  • I/O时函数立即返回,进程不等待IO完成。
  • I/O会继续进行下一步操作,等I/O完成了,会通知主进程,我I/O完事了,这时主进程会决定是否采用或者遗弃。
阻塞I/O

I/O时进程休眠,等待IO完成后进行下一步,也就是I/O阻塞了进程。

事件驱动和非阻塞I/O的联系

怎么告诉主程序I/O完事了,这就要靠事件驱动。

什么是事件驱动


  • I/O等异步操作结束后的通知
  • 观察者模式

I/O完成后,emit一个事件,然后会去找这个事件所绑定的函数,找到后,会执行这个函数。

为什么I/O要说成非阻塞的?

其实计算机指令的执行,除了goto语句等,都是按照顺序执行的,也就是同步,但是cpu指令执行的速度大致为一秒30亿次,非常快,我们感觉不到阻塞,但是I/O操作是非常慢的,如果用同步的,就能感觉到阻塞。

矛与盾

其实构建工具如webpack等,是属于cpu密集场景,因为需要打包、编译等操作。用node.js并不好,但是由于node.js应用是用JavaScript开发的,和对应的前端的ide很多,所以综合考虑,node.js是最佳运行环境。

node.js在公司中的使用场景


  • web Server
  • 本地代码构建

前端写的代码不能直接在浏览器上运行,就需要转化和编译,这就需要用到构建。
  • 实用工具开发
关于node单线程的问题

单线程只是针对主进程,I/O操作会进行系统底层多线程调度,node.js只是发起一个请求,交给I/O,I/O调用操作系统底层命令,底层是多线程调度,来达到最佳性能,node.js不是做所有的事情, 它只是负责听,将请求给I/O,I/O完成后告诉node.js。node.js再去执行其他方法。

node.js只有一个主进程,一个进程里只有一个单线程,多线程调度是底层操作系统干的事情。
单线程并不是单进程。node有个class,cpu有八核,那么调用class就可以有八个进程,可以满足更高的并发。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值