异步的实现方式:

1⃣️.回调函数

2⃣️.事件监听

3⃣️.发布、订阅模式

可以针对所有的事件进行统一管理,并且可以管理事件的订阅情况

4.高效与性能

单个操作性能并不优于其他解决方案

通过优化资源调配和I/O操作来实现高效

其他语言对IO的处理:

PHP:原地等待,多开进程 -- 多进程会浪费更多的系统资源,而且还要考虑多进程之间的数据和资源共享

C++:利用线程,程序要自己维护线程和资源的状态

5.单线程与多进程:

Google V8等JS引擎是单线程的,所以Node.js同样是单线程的。为了更好的利用CPU资源,可以利用子进程和多进程:

子进程:node.js的child_process模块,用于执行系统中非node.js的其他程序,也可以执行node.js代码,子进程可以很方便的与父进程进行通信。

多进程:资源占用问题和进程之间的通信,进程之间的通信要使用消息队列和共用缓存的方式来处理,资源占用可以使用PM2等第三方工具。

6.nodeJS缺点:

大量采用匿名函数,使得抛出的异常不易阅读

try/catch限于同步代码,使得异常捕获较为复杂(例如回调函数中一般使用内部参数捕获异常)

单线程可靠性:当单线程运行中发生了错误,并且错误并没有被捕获到,就发生了问题,还有比如执行同步任务的时候被阻塞了,单线程都无能为力。需要注意以下情况,编写代码时注意严谨,尽量周全地考虑可能的错误,并且在测试的时候尽量做到100%覆盖,模拟一些常见的错误等等。二是避免使用同步代码。三是用前面提到的多进程工具,当其中一个进程出现问题,不至于完全的不能服务,还可以编写专门的代码来进行检查进程是不是正常的运行,如果不正常,则进行重启等操作。

不适合CPU密集型的场景(即使它可以有效地利用CPU的资源)如视频处理、程序运算等,遇到这种情况,尽量使用其他能运用多核资源的语言来完成,或者编写node.js的C语言扩展。

回调的代码习惯影响阅读(无法根治)-- 详细的注释和友好的代码风格

最后编辑于:2020-02-04 02:49