异步的实现方式:
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