Nodejs:单线程为什么能支持高并发?

 

 

1、Nodejs是一个平台,构建在chrome的V8上(js语言解释器)built on Chrome's JavaScript runtime ,采用事件驱动event-driven、非阻塞模型 non-blocking I/O model c++库:libuv)。 

 

2、为什么单线程却能够支持高并发?

1)前提:I/O密集型任务

2)单线程的解释:主线程一个,底层工作线程多个。

3)事件机制的底层依赖库:libuv、libeio、libev

libuv:开发node过程中需要跨平台,首选为Linux使用libev(底层为epoll),备选Windows使用IOCP实现,用于抽象libevIOCP的高性能网络库。

1非阻塞TCP、非阻塞命名管道、UDP、异步DNS

2异步文件系统、路径查找、ANSI转义、文件系统事件

3子进程生成、线程池调度、进程间IPC与套接字共享

4高分辨率时间、定时器

epollIOCP的区别:

epoll用于Linux系统,IOCP用于Windows系统;epoll是同步非阻塞模型:当事件资源满足时发出可处理通知消息(主线程需要自己去处理);IOCP是异步非阻塞模型,当事件完成时发出通知消息(工作线程帮主线程处理完了)。

 

 

4)nodejs运行机制: 

 

aV8引擎解析JavaScript脚本

b、解析后的代码,调用Node API

clibuv库负责Node API的执行。它将不同的任务分配给不同的线程,形成一个Event Loop(事件循环),以异步的方式将任务的执行结果返回给V8引擎

dV8引擎再将结果返回给用户

 

 

3、单线程的好处:

1)多线程占用内存高

2)多线程间切换使得CPU开销大

3)多线程由内存同步开销

4)编写单线程程序简单

5)线程安全

 

4、单线程的劣势:

1)CPU密集型任务占用CPU时间长

2)无法利用CPU的多核

3)单线程抛出异常使得程序停止

 

posted @ 2018-10-15 17:49  silvercell  阅读(1045)  评论(0)    收藏  举报