循环 eventloop+node 的优缺点

161 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第14天点击查看活动详情
一、常用的 npm 指令有哪些
npm init / npm install / npm remove / npm uninstall / npm config set / npm search

二、module.exports 和 exports 的区别
本质上是无区别的, 最终暴露给外部的都是 module.exports, exports 只是 module.exports 的辅助工具, 他们是相等的,所以既用 exports.xxx 也用 module.exports, 则之前的 exports.xxx 会被覆盖掉

三、session 和 cookie 的作用, 以及区别是什么
session 是区别于数据库存在的一种服务器临时存储技术, 它主要存储一些无需持久化的数据,比如临时的登录状态信息等
cookie 是存在于浏览器上的一种浏览器本地存储的方式, 同域名下的 cookie 不同标签页可以共享, 默认过期时间是浏览器关闭时, 而且在进行 http 请求时, 会自动带上浏览器全部的 cookie发给后台, 后台也可以获取 cookie, 设置可以在响应时, 向浏览器中设置 cookie。

四、说一下事件循环 eventloop
1.所有同步任务都在主线程上执行,形成一个执行栈
2.当主线程中的执行栈为空时,检查事件队列是否为空,如果为空,则继续检查;如不为空,则执行
3.取出任务队列的首部,加入执行栈
4.执行任务
5.检查执行栈,如果执行栈为空,则跳回第 2 步;如不为空,则继续检查

五、node 的优点是什么?缺点是什么
1.优点:
1)高并发(最主要的一个优点)
2)适合 I/O 密集型应用
2.缺点:
1)不适合 CPU 密集型应用;CPU 密集型应用给 Node 带来的挑战主要是:由于 JavaScript单线程的原因,如果有长时间运行的计算(比如大循环),将会导致 CPU 时间片不能释放,使得后续 I/O 无法发起; 解决方案:分解大型运算任务为多个小任务,使得运算能够适时释放,不阻塞 I/O 调用的发起;
2)只支持单核 CPU,不能充分利用 CPU
3)可靠性低,一旦代码某个环节崩溃,整个系统都崩溃
原因:单进程,单线程
解决方案:
Nnigx 反向代理,负载均衡,开多个进程,绑定多个端口;开多个进程监听同一个端口,使用 cluster 模块;
4)开源组件库质量参差不齐,更新快,向下不兼容
5)Debug 不方便,错误没有 stack trace