node.js机制

Nodejs自己说是是单线程并且实现异步IO操作,只看上一句话就知道肯定是扯淡;那这个家伙是怎么实现的呢?

最底层,支持Nodejs运行的关键: V8 引擎:用来解析、执行javascript代码的运行环境。 libuv: 提供最底层的IO操作接口,包括文件异步IO的线程池管理和网络的IO操作,是整个异步IO实现的核心!这部分由C/C++编写,在源码的deps目录下可以看到。

正是这部分,Nodejs中许多异步方法在具体的实现时(NodeJs底层封装了Libuv,它提供了线程池、事件池、异步I/O等模块功能,其完成了异步方法的具体实现),内部均采用了多线程机制。

但是,只有用户的js代码全部执行完后,nodejs才调用libuv的事件循环入口函数uv_run(),即回调函数才有可能被执行。所以,如果主线程的js代码调用了阻塞方法,那么整个事件轮询就会被阻塞,事件队列中的事件便得不到及时处理

不适合CPU密集型应用;因为此时CPU会被长时间占用,被阻塞的线程会全部无法处理。将会导致CPU时间片不能释放,使得后续I/O无法发起;

结论:

1.node适合做I/O密集型,密集的意思是一个请求里有多个并行的i/o,并不是这个系统大部分是I/O请求

2.由于node主方法是单线程,所以除了I/O外的代码量越少越好,否则将失去意义

2.由于node主方法是单线程,所以除了I/O外的代码量越少越好,否则将失去意义

你可能感兴趣的:(node.js机制)