来,什么是node?简单认识下

node是什么?

玩前端的近年来大多都听过node.js的大名,从npm包管理工具和webpck的环境配置到后台的接口开发,node的应用范围越来越广泛。
node最早是基于v8引擎内核修改而来用来让服务端具有能执行javascript脚本的能力,诞生之初是为了更好的提升服务端的性能优化而来,只是一个服务端平台。不像其他后台语言php/java/phython需要apche/naginx/iis等服务器软件支持。

node的特点:

node算是提供了一个不用学习新的语言从事后台开发的可能。相对于其他语言更加适合运用在高并发、I/O密集、少量业务逻辑的场景(不适合大量计算)。node的单线程,非阻塞io(数据库读写),事件驱动实现了用最小的硬件成本去达到更高的并发和更优的处理性能。配合上webpack socket(后台推送)开发长连接的实时交互如聊天软件。

单线程

“条条道路通罗马”此时多线程就是条条道路,而node好比一条宽敞笔直的大道。有人可能会说前者不是好点吗?然而线程越多所消耗的内存大小也就随之增长,而node基于单线程的理念从而减小服务器内存的开销,实现8g/4w多的并发。单线程的话导致了不能高并发且一崩全崩的状况。而单线程的node怎么实现多线程才能实现的高并发就涉及到下一个特点了。


条条大路通罗马

非阻塞io

io简单点就是数据库的读写操作。常规的写入数据直到数据库返回操作再执行下一个。node则把io操作丢到事件环里循环,该做什么做什么,有结果后再执行回调函数里面再执行。
好比张三启动了服务器,正做某事,而李四的请求此时来了,服务端就先暂停张三的语法,把李四的请求放到事件环里面,之后继张三的事情。这就是非阻塞io,然后问题来了,当李四的请求回来了,选择执行张三还是李四?

事件驱动

当存在新旧io的时候,统统丢到事件环里等待调用。李四的io回来了,没事,丢环里就行,张三继续做自己的事情。事件驱动就是循环事件环,根据某些优先级执行操作。比如说涉及磁盘读写/网络通信/数据库=>事件环=>事件循环(存在优先级)=>回调函数(数据接收之后的操作)。


事件驱动

你可能感兴趣的:(来,什么是node?简单认识下)