Node.js多线程和异步

Node.js多线程和异步,node.js,Node.js,我对js中的多线程和异步有点困惑。集群、流、子进程和工作线程之间的区别是什么?这有点含糊不清,所以我只做一个概述 流实际上就像其他语言中的数据流一样。类似于C中的iostreams,您可以从中获得用户输入或其他类型的数据。它们通常被另一个类屏蔽,所以您不知道您正在使用流。除非你正在建造一个新的类型,否则你不会弄乱这些 子进程、工作线程和集群都是在节点应用程序中利用多核处理的方式 工作线程是以节点方式进行的基本多线程,每个线程都有一种与父线程通信的方式,并且每个线程之间可以共享内存。传入函数和数据

我对js中的多线程和异步有点困惑。集群、流、子进程和工作线程之间的区别是什么?

这有点含糊不清,所以我只做一个概述

流实际上就像其他语言中的数据流一样。类似于C中的iostreams,您可以从中获得用户输入或其他类型的数据。它们通常被另一个类屏蔽,所以您不知道您正在使用流。除非你正在建造一个新的类型,否则你不会弄乱这些

子进程、工作线程和集群都是在节点应用程序中利用多核处理的方式

工作线程是以节点方式进行的基本多线程,每个线程都有一种与父线程通信的方式,并且每个线程之间可以共享内存。传入函数和数据,并可以在线程完成处理时提供回调

集群更适合于网络共享。通常在主侦听器端口后面使用,主应用程序将侦听连接,然后以循环方式将它们分配给每个集群线程以供使用。它们跨多个处理器共享服务器端口,以平衡负载

子进程是一种创建新进程的方法,与通过popen创建新进程的方法类似。它们可以是异步的或同步的(非阻塞或阻塞节点事件循环),并且可以分别通过stdout/stderr和stdin向父进程发送和从父进程接收。父进程可以向每个子进程注册侦听器以进行更新。您可以将文件、函数或模块传递给子进程。通常不共享内存

我建议你自己阅读文档,然后带着你的任何具体问题回来,这样模糊的问题不会让你得到太多,让人觉得你事先没有做好自己的工作

文件:


关于Node.js中的多线程,首先要记住的是,在用户空间中,不存在线程的概念,因此不能使用线程编写任何代码。任何节点程序都是单线程程序(在用户空间中)

由于节点程序是单个线程,并且作为单个进程运行,因此它只使用单个CPU。大多数现代处理器都有多个CPU,为了利用所有这些CPU并提供更好的吞吐量,您可以启动与集群相同的节点程序

节点的
集群
模块,允许您启动节点程序,启动的第一个实例作为主实例启动。master允许您使用
cluster.fork()
方法作为单独的进程(而不是线程)生成新的worker。节点程序要完成的实际工作由工作人员完成。这充分证明了这一点

子进程是从当前进程派生出来的进程,它们之间有一个已建立的IPC通道以相互通信。我在集群中描述的主进程和工作进程是子进程的一个示例。节点中的
子进程
模块允许您根据需要生成自定义子进程

流与多线程或多进程完全无关。流只是处理大量数据的一种方式,而无需同时将所有数据加载到工作内存中。考虑到你想读取一个10GB的日志文件,而你的服务器只有4GB内存。尝试使用
fs.readFile
加载文件将使进程崩溃。相反,您可以使用
fs.createReadStream
并使用它以较小的块处理文件,这些块可以加载到内存中


希望这能解释。有关更多详细信息,请阅读。

欢迎使用stackoverflow。请更新您的问题,包括到目前为止您知道的内容以及您的困惑所在。你也可以看看。