我是靠谱客的博主 传统翅膀,这篇文章主要介绍Nodejs:单线程为什么能支持高并发?,现在分享给大家,希望可以做个参考。

1、Nodejs是一个平台,构建在chromeV8上(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实现,用于抽象libevIOCP的高性能网络库。
    • 非阻塞TCP、非阻塞命名管道、UDP、异步DNS
    • 异步文件系统、路径查找、ANSI转义、文件系统事件
    • 子进程生成、线程池调度、进程间IPC与套接字共享
    • 高分辨率时间、定时器
  • epollIOCP的区别:
    • 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:单线程为什么能支持高并发内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部