有异步I/O,必有异步编程。异步编程有它的优势,也有它的难点,下面我们就这门语言异步编程的优势和难点来展开谈谈。
它的优势当然是它的底层机制:非阻塞的I/O模型,它可以令CPU和I/O不会相互影响,对于最近的云计算应用,它更加可以施展才能。利用事件循环,js就像一个分配任务和处理结果的大管家,I/O线程池里的各个I/O线程都是小二,负责兢兢业业地完成分配来的任务,小二和管家之间互不依赖,这令到整个客栈的效率提高不少。所以Node.js很好的解决了I/O的性能问题,而对于CPU密集型的计算就要看管家的能耐了。在使用的过程中,特别是高并发的状况下,需要防止过多地消耗CPU的时间片,这样才能很好的利用node.js的特性。只要合理利用Node的异步模型和V8的高性能,就可以充分发挥CPU和I/O资源的优势。
与此同时,它的难点也出现了,一个是异步的代码编写方法实在是太过奇葩,容易造成回调地狱,后面出现的Promise机制很好的解决了这个问题,Promise通过封装异步调用,实现了正向用例和反向用例的分离以及逻辑处理延迟,Promise带了两个参数--resolve和reject,resolve表示完成态,reject表示失败态。另外还有一个重要的方面,就是在异常处理的方式上面,通常我们用try{...} catch{...} finally{...}, 但这种写法不一定捕捉的是异步方法里的错误,像类似JSON.parse()方法,如果里面传的不是JSON,也会报错,也会进入到catch块,这个时候就很难判断错误的位置。
很多人说XXX语言是世界上最好的语言,其实没有这一说,只有最合适的语言。当我们处理高并发非CPU密集型的数据的时候,可以优先选择Node.js, 这样就可以把Node.js的优势发挥到极致。
网友评论