*这个系列是阅读并实践朴灵的著作《深入浅出NodeJS》一书的笔记*
第1章 Node简介
1. 在底层构建了很多异步I/O的API,意义在于可以从语言层面很自然地进行并行I/O操作。
2. JavaScript是一门图灵完备的语言。
3. Node的结构与Chrome相似,都是基于事件驱动的异步架构。
4. Node将前端浏览器中广泛且成熟的事件引入后端,配合异步I/O,将事件点暴露给业务逻辑。(例如一个http服务器连接,请求代码)
5. Node保持了Javascript在浏览器中单线程的特点。最大好处是避免同步、死锁问题和上下文切换的开销。缺点是无法利用多核CPU,错误会引起整个应用退出(健壮性),大量计算占用CPU导致无法继续调用异步I/O。对于第三点缺陷,浏览器JS 有类似的问题,JS与UI共用一个线程,长时间执行JS会导致UI渲染和响应被中断。HTML5定制了Web Workers标准解决这个问题,其可以创建工作线程进行计算,工作线程不阻塞主线程,通过消息传递的方式返回运行结果,不能访问主线程的UI。Node的解决方案是childe_process。通过创建子进程,分解掉大量的计算,通过进程之间事件消息传递结果。同时可以应对单线程的健壮性和无法利用多核CPU的问题。
6. Node通过架构改动实现跨平台,在系统与NodeJS上层模块之间构建一层平台层架构:libuv。也可以通过libuv实现Node的第三方c++模块的跨平台。
7. Node面向网络且擅长并行I/O,适合I/O密集型的场景。
8. 有两种方式来充分利用CPU:
a. 编写C++扩展高效利用CPU
b. 通过子进程的方式,将一部分Node进程当作常驻服务进程用于计算,然后利用进程间的消息传递结果,将计算与I/O分离
9. 阿里巴巴使用Node做分布式数据查询。Node高效利用并行I/O的过程,也是高效实用数据库的过程。