日常的学习笔记,包括 ES6、Promise、Node.js、Webpack、http 原理、Vue全家桶,后续可能还会继续更新 Typescript、Vue3 和 常见的面试题 等等。
Node.js是一个基于 Chrome V8 引擎的JavaScript运行环境(runtime),Node不是一门语言是让js运行在后端的运行时,并且不包括javascript全集,因为在服务端中不包含DOM和BOM,Node也提供了一些新的模块例如http、fs模块等。Node.js 使用了事件驱动、非阻塞式 I/O 的模型,使其轻量又高效并且Node.js 的包管理器 npm,是全球最大的开源库生态系统。到此我们已经对node有了简单的概念。
Node在处理高并发,I/O密集场景有明显的性能优势。
Web主要场景就是接收客户端的请求读取静态资源和渲染界面,所以Node非常适合Web应用的开发。
说到高并发,肯定就会想起多线程。那么多线程和高并发之间的关系和区别又是什么呢?
首先我们先来了解一下什么是多线程
后端语言(包括Java、C++等)存在一个线程池,每发送一次请求,线程池都会分配一个线程给服务器,用来处理请求,以此类推。因为多线程语言的特点是同步请求,所以在多线程发送请求时,可能会存在单个线程阻塞的情况,需要等待当前这个线程的任务处理完毕后,才会释放线程并放回到线程池,方便下一批任务的使用。当前线程数超过线程池最大可分配数量时,可能就会出现等待的情况。
多线程优点:可以高效高速的处理多个api请求(图片压缩、大量计算 等...),属于cpu密集型。
多线程缺点:不安全性,假设我们有多个线程需要对数据库同一个资源进行操作(例如对同一个数据进行修改),就会出现数据安全性的问题 [需要对资源进行加锁操作]。
多线程并非一起做某一件事,靠的是切换上下文(分时),所以多线程会浪费一些资源。
关于多线程的具体概念,可以去查阅相关的资料。
高并发是单线程的一个概念。
Node是多线程的,但是其主线程是单线程。所以我们一直都说,Node其实是单线程语言。
关于同步阻塞与异步非阻塞,可以参考我之前的文章。
本篇文章由莫小尚创作,文章中如有任何问题和纰漏,欢迎您的指正与交流。
您也可以关注我的 个人站点、博客园 和 掘金,我会在文章产出后同步上传到这些平台上。
最后感谢您的支持!