概述
1、Nodejs
是一个平台,构建在chrome
的V8
上(js
语言解释器),采用事件驱动、非阻塞模型( c++
库:libuv
)。
参考官方: Node.js is a platform built on Chrome’s JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.
2、为什么单线程却能够支持高并发?
(1)前提:I/O
密集型任务
(2)单线程的解释:主线程一个,底层工作线程多个。
(3)事件机制的底层依赖库:libuv、libeio、libev
libuv
:开发node
过程中需要跨平台,首选为Linux
使用libev
(底层为epoll
),备选Windows
使用IOCP
实现,用于抽象libev
和IOCP
的高性能网络库。- 非阻塞
TCP
、非阻塞命名管道、UDP
、异步DNS
- 异步文件系统、路径查找、
ANSI
转义、文件系统事件 - 子进程生成、线程池调度、进程间IPC与套接字共享
- 高分辨率时间、定时器
- 非阻塞
epoll
和IOCP
的区别:epoll
用于Linux
系统,IOCP
用于Windows
系统;epoll
是同步非阻塞模型:当事件资源满足时发出可处理通知消息(主线程需要自己去处理);IOCP
是异步非阻塞模型,当事件完成时发出通知消息(工作线程帮主线程处理完了)。
(4)nodejs
运行机制:
a、V8
引擎解析JavaScript
脚本
b、解析后的代码,调用Node API
c、libuv
库负责Node API
的执行。它将不同的任务分配给不同的线程,形成一个Event Loop
(事件循环),以异步的方式将任务的执行结果返回给V8
引擎
d、V8
引擎再将结果返回给用户
3、单线程的好处:
(1)多线程占用内存高
(2)多线程间切换使得CPU
开销大
(3)多线程由内存同步开销
(4)编写单线程程序简单
(5)线程安全
4、单线程的劣势:
(1)CPU
密集型任务占用CPU
时间长
(2)无法利用CPU
的多核
(3)单线程抛出异常使得程序停止
最后
以上就是传统翅膀为你收集整理的Nodejs:单线程为什么能支持高并发?的全部内容,希望文章能够帮你解决Nodejs:单线程为什么能支持高并发?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复