Open onvno opened 2 years ago
理解NodeJS 实现高并发原理
这部分是由 Javascript编写的,也就是我们使用过程中直接能调用的 API,在源码中的 lib 目录下可以看到。
这一部分是Javascript 能够直接调用C/C++代码的关键。 主要作用是把nodejs底层实现的C/C++库暴露给Javascript 环境。 Nodejs 通过一层 C++ Binding,把 JS 传入 V8, V8 解析后交给 libuv 发起 asnyc I/O, 并等待消息循环调度。 可以将其理解为一个桥,桥这头是js,桥那头是C/C++,通过这个桥可以让js调用C/C++。
3.底层库
V8: Google 推出的 Javascript VM,也是 Node.js 为什么使用的是 Javascript的关键,它为 Javascript提供了在非浏览器端运行的环境,它的高效是 Node.js 之所以高效的原因之一。 Libuv:它为 Node.js 提供了跨平台,线程池,事件池,异步 I/O 等能力, Node.js高效的异步编程模型很大程度上归功于libuv的实现。。 C-ares:提供了异步处理 DNS 相关的能力。 http_parser、OpenSSL、zlib 等:提供包括 http 解析、SSL、数据压缩等其他的能力。
节省了线程创建销毁的开销
所有IO操作都是异步,可以最大化利用服务性能
node的优点:I/O密集型处理是node的强项,因为node的I/O请求都是异步的(如:sql查询请求、文件流操作操作请求、http请求...)
node的缺点:不擅长cpu密集型的操作
理解NodeJS 实现高并发原理
node分层
这部分是由 Javascript编写的,也就是我们使用过程中直接能调用的 API,在源码中的 lib 目录下可以看到。
这一部分是Javascript 能够直接调用C/C++代码的关键。 主要作用是把nodejs底层实现的C/C++库暴露给Javascript 环境。 Nodejs 通过一层 C++ Binding,把 JS 传入 V8, V8 解析后交给 libuv 发起 asnyc I/O, 并等待消息循环调度。 可以将其理解为一个桥,桥这头是js,桥那头是C/C++,通过这个桥可以让js调用C/C++。
3.底层库
V8: Google 推出的 Javascript VM,也是 Node.js 为什么使用的是 Javascript的关键,它为 Javascript提供了在非浏览器端运行的环境,它的高效是 Node.js 之所以高效的原因之一。 Libuv:它为 Node.js 提供了跨平台,线程池,事件池,异步 I/O 等能力, Node.js高效的异步编程模型很大程度上归功于libuv的实现。。 C-ares:提供了异步处理 DNS 相关的能力。 http_parser、OpenSSL、zlib 等:提供包括 http 解析、SSL、数据压缩等其他的能力。
性能
节省了线程创建销毁的开销
所有IO操作都是异步,可以最大化利用服务性能
node的优点:I/O密集型处理是node的强项,因为node的I/O请求都是异步的(如:sql查询请求、文件流操作操作请求、http请求...)
node的缺点:不擅长cpu密集型的操作
单线程与多线程比较