node 是什么
node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境(runtime),node 不是一门语言,是让 JavaScript 运行在后端的运行时,并且不包括 JavaScript 全集,因为在服务端中不包含 DOM 和 BOM;
node 也提供了一些新的模块,例如:http、fs 等;
node 使用了事件驱动、非阻塞式 I/O 模型,使其轻量又高效,并且 node.js 的包管理器 npm 是全球最大的开源库生态系统;
node 的优势
node 更擅长 IO 密集型 高并发请求(文件操作、网络操作、数据库操作);
java 更擅长 cpu 密集型任务(逻辑处理运算、压缩、解压、加密、解密);
问题:java 多线程在某些场景下的一些问题;
客户端有几个请求访问服务器,那么服务器就会提供几个线程来处理,此时对于用户而言,体验是很好的;
但是,问题也是很明显的,某个时间内请求量很大,又不能无限增加响应线程来处理,那么就出现了无人响应的问题;
解决:node 中 Reactor 应答者模式,单线程完成多线程工作;
只有一个主线程,当请求结束后主线程才会去处理,主线程在不同任务上来回切换处理,这样就相当于单线程完成了多线程工作,并且是非阻塞的,每个请求结束后都会有主线程的应答;
使用这样的操作就避免多线程上下轮切换的时候要考虑的 状态保存、时间消耗以及状态锁等问题;
javascript 在最初设计时设计成了单线程为什么不是多线程呢
-
如果多个线程同时操作 DOM 那岂不会很混乱;
-
这里所谓的单线程指的是主线程是单线程的,所以在 node 中主线程依旧是单线程的;
-
单线程特点是节约了内存,并且不需要切换执行上下文,而且单线程不需要管锁的问题;
同步异步和阻塞非阻塞
阻塞和非阻塞 针对的是调用方,同步异步 针对的是被调用方
应用场景
-
中间层:
-
操作数据库提供 API 服务;
-
实时聊天应用程序;
-
…
vue3🛫 案例:todolist
上一篇