node是多线程吗,node js 多线程
本文向你介绍进程和线程,带你认识node.js中的线程,看看node是不是真的单线程,child_process和cluster模块,简单说说多线程之间是如何相互通信的。
node.js速度课程简介:进入学习
进程
在操作系统中,对进程的解释:进程是具有一定独立功能的程序在数据集上的动态执行过程,是操作系统进行资源分配和调度的独立单元,是应用程序运行的载体。
它是应用程序的运行过程(动态概念)。
它是系统分配和调度资源的基本单位(进程一般由程序、数据采集和进程控制块三部分组成)。
每个进程都有自己独立的空间地址,数据栈(数据不在进程间共享,可以通过其他方式进行通信)一般有五种状态:初始状态、执行状态、等待状态、就绪状态和终止状态。
线程
线程是程序执行中的单个顺序控制流,是程序执行流的最小单位,也是处理器调度和分派的基本单位。
任务调度和执行的最小单位。
进程中代码的单个执行路径
进程和线程区别
线程是程序执行的最小单位,进程是操作系统资源分配的最小单位。一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路径。进程之间是相互独立的,但是程序的内存空间是在同一个进程的线程之间共享的,线程上下文切换比进程上下文切换更快。
node中进程
节点是单线程的,即一个进程只有一个线程节点。[推荐研究:《nodejs 教程》]
真的是单线程吗?
虽然Node是单线程的,但是它的底层是多线程的。在循环中,libuv库从事件队列中取出任务,并将它们分配给不同的线程进行处理。现在硬件条件没有以前那么落后,如果只用单线程进行运算,资源会浪费。因此,为了实现多进程处理,充分发挥多核CPU的优势,在Node中提供了child_process模块和cluster模块。
Child_process模块用于打开多个子进程,不同的命令或node.js模块文件和可执行文件在子进程中执行。
Cluster模块,一个集群模块,用于启动Node.js应用程序中的多个子进程,每个子进程运行Node.js应用程序的一个副本。
child_process模块
child_process.spawn():适用于返回大量数据,如图像处理、二进制数据处理等。
Child_process.exec():适用于数据量较小的情况。maxBuffer的默认值是200 * 1024。超过这个默认值将导致程序崩溃。如果数据量太大,可以使用spawn。
Child_process.execFile():类似于child_process.exec(),只是不能通过shell执行,不支持I/O重定向、文件查找之类的行为。
Child_process.fork():派生新的进程,这些进程相互独立。每个进程都有自己的V8实例和内存,系统资源是有限的。不建议派生太多子进程,通常根据系统* CPU核心数设置。
cluster模块
cluster.fork([env])打开子进程,其中创建了Node.js应用程序的实例。
isMaster属性和isWorker属性用于确定它是在主进程中运行还是在子进程中运行。
Workers属性用于获取在所有子进程中运行的worker对象。
扩展一下,多线程是如何通信的?
进程间的通信
四种:
消息传递(管道、FIFO、消息队列)
信号量(互斥、条件变量、读写锁)
共享内存(匿名、命名)
远程过程调用
不仅在node中会遇到进程间的通信,在其他语言中也会遇到。当然也是面试中必须要问的问题。
很多内容可以深入讨论!
有关编程的更多信息,请访问:编程入门!上面的Node.js真的是单线程吗?进程之间是如何通信的?更多详情请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。