一、node单线程实现高并发原理

众所周知nodejs是单线程且支持高并发的脚本语言。可为什么单线程的nodejs可以支持高并发呢?很多人都不明白其原理,下面我来谈谈我的理解:

1. node的优点:I/O密集型处理是node的强项,因为node的I/O请求都是异步的(如:sql查询请求、文件流操作操作请求、http请求...)

a. 什么是异步?

异步:发出操作指令,然后就可以去做别的事情了,所有操作完成后再执行回调

异步的实现原理:

// 第一步:定义变量

let a = 1;

// 第二步:发出指令,然后把回调函数加入异步队列(回调函数并没有执行)

setTimeout(() => {

console.log(a);

}, 0)

// 第三步:赋值,回调函数没有执行

a = 2;

// 第四步:发出指令,然后把回调函数加入异步队列(回调函数并没有执行)

setTimeout(() => {

console.log(a);

}, 0)

// 第五步:赋值,回调函数没有执行

a = 3;

// 当所有代码执行完毕,cpu空闲下来了,就会开始执行异步队列里面的回调函数

// 所以最后控制台输出:3 3

b. 什么是异步I/O?

异步I/O顾名思义就是异步的发出I/O请求

c. 虽然nodejs可以异步的发出I/O请求,但nodejs不支持多线程,为啥就可以支持高并发呢?

因为nodejs的I/O操作,底层是开启了多线程的

当同时有多个IO请求时,主线程会创建多个eio线程,以提高IO请求的处理速度

额外知识点:

d. 虽然nodejs的I/O操作开启了多线程,但是所有线程都是基于主线程开启的只能跑在一个进程当中还是不能充分利用cpu资源

pm2进程管理器可以解决这个问题

pm2 是一个带有负载均衡功能的Node应用的进程管理器.

e. cpu核数与线程之间的关系

在过去单CPU时代,单任务在一个时间点只能执行单一程序。之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程。虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个CPU,并交由操作系统来完成多任务间对CPU的运行切换,以使得每个任务都有机会获得一定的时间片运行。而现在多核CPU的情况下,同一时间点可以执行多个任务,具体到这个任务在CPU哪个核上运行,这个就跟操作系统和CPU本身的设计相关了

2. node的缺点:不擅长cpu密集型的操作

a. 什么是cpu密集型操作(复杂的运算、图片的操作)

// 这就是一个cpu密集型的操作

for (let i = 0; i < 1000000; i++) {

console.log(i);

}

b. nodejs为什么不擅长cpu密集型操作

因为nodejs是单线程的

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

本文标题: 详解node单线程实现高并发原理与node异步I/O

本文地址: http://www.cppcns.com/ruanjian/java/204580.html

cpu多核 node 单线程_详解node单线程实现高并发原理与node异步I/O相关推荐

  1. 【视频】详解HDFS的HA高可用原理

    详解HDFS的HA高可用原理

  2. cpu多核 node 单线程_node单线程支撑高并发原理(node异步I/O)

    一.node单线程实现高并发原理 众所周知nodejs是单线程且支持高并发的脚本语言.可为什么单线程的nodejs可以支持高并发呢?很多人都不明白其原理,下面我来谈谈我的理解: 1. node的优点: ...

  3. 多功能时钟电路的设计框图_详解通用串行总线USB,工作原理、接口电路设计

    USB 的英文全称为 Universal Serial Bus,中文含义是通用串行总线,它是一种快速的,双向的,同步传输的廉价的并可以进行热拔插的串行接口.USB 接口使用方便,它可以连接多个不同的设 ...

  4. node.js----util.inherits详解

    node.js----util.inherits详解 var util = require('util'); //导入模块 function Base() { //新建函数对象this.name = ...

  5. 产品型号 计算机硬件,主流CPU产品型号后缀名详解_CPUCPU评测-中关村在线

    ◆ 主流CPU产品型号后缀名详解 CPU作为一台电脑中最为重要的核心部件,其硬件性能的高低直接决定着个人电脑整机的性能定位.从目前两大处理器厂商Intel和AMD所推出的产品看,其产品型号后缀的微小差 ...

  6. 阿里云服务器采用AMD CPU处理器ECS实例规格详解

    阿里云服务器有AMD CPU处理器,阿里云服务器ECS通用型g7a.计算型c7a和内存型r7a采用2.55 GHz主频的AMD EPYCTM MILAN处理器,单核睿频最高3.5 GHz:通用型g6a ...

  7. 大脑构造图与功能解析_大脑的结构和功能分区_详解人脑构造与功能

    大脑的结构和功能分区 _ 详解人脑构造与功能 学习,可以开阔人的大脑 ; 学习,可以使人的大脑拥有更多的知识,人的大脑和肢 体一样,多用则灵,不用则废.那么下面学习啦小编给大家分享一些大脑的结构和功 ...

  8. COM单线程套间详解

    COM单线程套间详解 一  简介 高级COM工程项目经常需要跨线程传递对象,以在不同线程中调这些对象方法,激发它们的事件.下面这篇文章针对具有基本的com知识(比如理解IUnkown和IDispatc ...

  9. Python中常见的__init__.py是什么意思?详解Python import的方式和原理

    Python中常见的__init__.py是什么意思?详解Python import的方式和原理 1 什么是模块化编程? 2 __init__.py文件的作用 3 Python如何import第三方库 ...

最新文章

  1. duilib 显示内存图片
  2. Xamarin开发Android笔记:使用ZXing进行连续扫描
  3. 《C和指针》读书笔记第一章快速上手
  4. SEO算法:如何通过PageRank算法判断SEO排序结果
  5. Selenium无法点击元素,报错:ElementClickInterceptedException:element click intercepted
  6. gdb 收到SIGPIPE信号
  7. 赵明:荣耀将推超级旗舰 有属于自己的P和Mate系列
  8. mysql登录报错error1045,mysql创建登录报错ERROR1045(28000)
  9. php区分全角半角字符,php如何判断是字符串全角还是半角
  10. 允许我在这里吐槽一下某宝客的代码
  11. 代码主题darcula_Pycharm最舒服的主题风格
  12. 列表、元组、字典、集合的定义与操作
  13. python批量写入数据库_python实现数据库批量数据插入.
  14. Simulink里的S函数介绍(Matlab-1)
  15. 超级记忆/图像数字记忆 110位数字图像转换表 21-30
  16. java poi 水印_poi excel如何设置水印透明度
  17. 【协议】LLDP、ARP、STP、ICMP协议
  18. 高清美图和GIF动图素材网站推荐,拿走不谢!
  19. 【资料整理】高精地图
  20. 随着人工智能发展的少儿编程教育

热门文章

  1. [推荐]在JavaScript中实现命名空间
  2. [Shell 脚本] 备份数据库文件至OSS服务(纯shell脚本无sdk)
  3. Scrum 冲刺博客第二篇
  4. will_paginate 用作查询分页的注意事项
  5. 神技能!研究人员利用扫描仪成功从物理隔离设备中偷出数据
  6. 微信支付报错:app没有获取微信支付权限
  7. Docker:镜像操作和容器操作
  8. 三种方式实现自定义圆形进度条ProgressBar
  9. 使用npm install XXX 时出现“failed to fetch from regi...
  10. python地图热力图是什么意思_python实现输入的数据在地图上生成热力图效果