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外的代码量越少越好,否则将失去意义

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容