nodejs是单线程还是多线程_node是多线程还是单线程?
node是单线程的,采用单线程异步非阻塞模式。因为javascript引擎的关系,node默认是单线程,一个node.js应用无法利用多核资源。
Node.js采用事件驱动和异步I/O的方式,实现了一个单线程、高并发的运行时环境,而单线程就意味着同一时间只能做一件事。
nodejs实现异步、非阻塞:
nodejs其实只有js执行是单线程,I/O显然是其它线程。
js执行线程是单线程,把需要做的I/O交给libuv,自己马上返回做别的事情,然后libuv在指定的时刻回调就行了。
细化一点,nodejs会先从js代码通过node-bindings调用到C/C++代码,然后通过C/C++代码封装一个叫 “请求对象” 的东西交给libuv,这个请求对象里面无非就是需要执行的功能+回调之类的东西,给libuv执行以及执行完实现回调。
总结来说,一个异步 I/O 的大致流程如下:
1、发起 I/O 调用
用户通过 Javascript 代码调用 Node 核心模块,将参数和回调函数传入到核心模块;
Node 核心模块会将传入的参数和回调函数封装成一个请求对象;
将这个请求对象推入到 I/O 线程池等待执行;
Javascript 发起的异步调用结束,Javascript 线程继续执行后续操作。
2、执行回调
I/O 操作完成后,会取出之前封装在请求对象中的回调函数,执行这个回调函数,以完成 Javascript 回调的目的。(这里回调的细节下面讲解)
从这里,我们可以看到,我们其实对 Node.js 的单线程一直有个误会。
事实上,它的单线程指的是自身Javascript运行环境的单线程,Node.js并没有给Javascript执行时创建新线程的能力,最终的实际操作,还是通过Libuv以及它的事件循环来执行的。这也就是为什么 Javascript一个单线程的语言,能在Node.js里面实现异步操作的原因,两者并不冲突。
nodejs是单线程还是多线程_node是多线程还是单线程?相关推荐
- Problem 58 怎样判断当前程序链接的是多线程版的Glibc还是单线程版的Glibc?
Problem58 怎样判断当前程序链接的是多线程版的Glibc还是单线程版的Glibc? Ans: 在Linux程序设计当中,如果一个程序被设计成可以支持单线程或多线程的模式,可以当过弱引用的方法来 ...
- 多线程不能不知道的之单线程和多线程的比较
早期的计算硬件十分复杂,但是操作系统执行的功能确十分的简单.那个时候的操作系统在任一时间点只能执行一个任务,也就是同一时间只能执行一个程序.多个任务的执行必须得轮流执行,在系统里面进行排队等候. 栗子 ...
- 【java多线程】多线程为什么跑的比单线程还要慢?!
问:多线程是不是能加快处理速度? 解析: 在使用多线程时,一定要知道一个道理:处理速度的最终决定因素是CPU.内存等,在单CPU(无论多少核)上,分配CPU资源的单位是"进程"而不 ...
- 多线程为什么跑的比单线程还要慢?!
前言: 面试官:多线程和单线程哪个快? 我凭借微弱的记忆以及正经分析回答:多线程快,因为可以执行多个任务,而单线程只能执行一个任务. 面试官:无论什么情况多线程都比单线程快吗? 我犹豫了一下正经回答: ...
- 单线程+多路IO复用 Redis6多线程
作为单线程,如何监听多个客户端 redis通过io多路复用程序来监听多个socket(客户端连接),然后根据socket需要执行的操作(连接应答(accept).读取(read).写入(write). ...
- 为什么nodejs是单进程的_Nodejs探秘:深入理解单线程实现高并发原理
导语:在我接触Nodejs的时候,听的最多的关键字就是:事件驱动.非阻塞I/O.高效.轻量,是单线程且支持高并发的脚本语言.可为什么单线程的nodejs可以支持高并发呢?很多人都不明白其原理,自己也在 ...
- 多线程编程 java_java多线程编程
一.多线程的优缺点 多线程的优点: 1)资源利用率更好 2)程序设计在某些情况下更简单 3)程序响应更快 多线程的代价: 1)设计更复杂 虽然有一些多线程应用程序比单线程的应用程序要简单,但其他的一般 ...
- java是多线程_Java之多线程(一)
一,前言 今天总结一些关于线程方面的知识,说到线程可谓是无人不知,毕竟这东西不管是在工作开发中,还是实际生活中都时时存在着.关于线程方面的内容非常多,从简单的单线程,多线程,线程安全以及到高并发等等 ...
- android 多线程 js,JS多线程(web work)
JS多线程 JS多线程不允许操作DOM 1. 引用Concurrent Thread.js库 用法:Concurrent.Thread.Create(function(){};) 2. Web Wor ...
最新文章
- ViewStub 使用注意事项
- 汽车和山羊问题matlab_关于博弈的山羊与汽车问题
- LB 终面 与 智能家电 的浅析
- 图书馆自动化系统 Evergreen 3.3 发布,迁移到 Angular
- 炫彩界面库使用方法问题记录
- xheditor的使用方法
- JVM调优常用参数配置
- 第 十 一 天 : 复 习 完 ( 四 )
- iOS: TableView如何刷新指定的cell 或section
- 明确C++风格的类型转换的用法
- php的api数据接口书写实例
- 使用TweenMax更方便的创建连续的运动。
- web自动化测试 Selenium2 Java自动化测试实战9_3
- c语言与或非异或符号怎么打,逻辑运算符的符号
- MFC 通用对话框之“查找替换“对话框
- JavaScript 全栈工程师培训教程(React.js + Node.js)
- 树莓派4B安装WPS解决字体缺失问题
- C语言getc函数没错不管用,对比C语言中getc()函数和ungetc()函数的使用
- 基于Spring Boot的个人博客系统的设计与实现 毕业设计-附源码271611
- 谈微信里的“养生“谣言