ECMAScript 6,令Node.js也可以写出同步执行的代码(上)
从MOsky的博客阅读此文 引言 本人学习Node.js已有两周了,有点心得,写成文章,一方面便于今后自己查阅,另一方面巩固自己所学。如有错误,请诸位赏脸批评指教。 Node.js给我的第一印象就是,它的I/O操作是非阻塞的。非阻塞I/O带来了性能上的优势。与Java的阻塞式I/O操作做对比,Java程序需要从网络下载资源的时候,阻塞线程,当查询数据库的时候,阻塞线程,当读取文件的时候,阻塞线程。诸如此类的来自I/O的阻塞将浪费不少CPU的时间。如果心疼这些浪费的时间,那好,你就多开几个线程或进程。但这又引入了线程之间切换的代价。 Node.js使用事件驱动机制,当涉及I/O操作时,代码异步执行。这样带来的另一个好处就是,不需要考虑麻烦的 线程安全 问题,因为到Node.js即便是单线程,也不会因为I/O阻塞而出现性能瓶颈。同样和Java做比较。Java因为性能问题而开多线程,因为开多线程而需要考虑线程安全问题。Node.js可不这样。君不知曾有人在多线程的情况下使用HashMap类而导致服务器崩溃,虽然这只能算自作自受(因为HashMap的API上明确告诉你HashMap是非线程安全的),但如果语言本身就令程序员无需担心线程安全问题,那么这种情况就不会因为程序员的粗心而发生了。 但非阻塞I/O操作也有令人不爽的地方,进行I/O操作的时候,只能 异步调用 。 异步调用的缺点