Javascript 在node.js中,将数据库工作转移到子进程是一个好主意吗?

Javascript 在node.js中,将数据库工作转移到子进程是一个好主意吗?,javascript,node.js,child-process,Javascript,Node.js,Child Process,我刚开始进入child_进程,我所知道的是,它有利于将阻塞函数(例如,循环一个巨大的数组)委托给子进程 我使用mysql数据库进行通信。我想知道将一些异步数据库工作转移到子进程是否有好处。我在另一个线程中读到(不幸的是,我在浏览器历史记录中找不到),没有充分的理由将异步函数委托给子进程。这是真的吗 示例代码: child.js import {createConnection} "./dbConnection"; import {SomeTable} from "./entity/SomeTab

我刚开始进入
child_进程
,我所知道的是,它有利于将阻塞函数(例如,循环一个巨大的数组)委托给子进程

我使用mysql数据库进行通信。我想知道将一些异步数据库工作转移到子进程是否有好处。我在另一个线程中读到(不幸的是,我在浏览器历史记录中找不到),没有充分的理由将异步函数委托给子进程。这是真的吗

示例代码:

child.js

import {createConnection} "./dbConnection";
import {SomeTable} from "./entity/SomeTable";

process.on('message', (m)=> {
    createConnection().then(async connection=>{
        let repository = connection.getRepository(SomeTable);
        let results = await repository
            .createQueryBuilder("t")
            .orderBy("t.postId", "DESC")
            .getMany();

        process.send(results);
    })
});
main.js

const cp = require('child_process');
const child = cp.fork('./child.js');
child.send('Please fetch some data');
child.on('message', (m)=>{
      console.log(m);
});

Javascript最大的好处是它的异步特性

调用异步函数时,代码将继续执行,而不是等待响应。当函数完成了,给出了答案,它就继续这个部分

您的数据库调用已经是异步的。因此,您将毫无代价地生成另一个节点进程。因为您的数据库承担了所有的热量,所以在这方面拥有更多的nodeJS进程是没有帮助的

以相同的示例为例,但使用文件写入。什么可以使磁盘写入速度更快?真的没什么。。。但我们在乎吗?没有,因为我们的nodej没有被阻塞,并且一直在应答请求和处理任务。您可能需要检查的唯一一件事是不要同时发送一千个文件写入,如果它们很大,则会对文件系统产生负面影响,但由于写入不是CPU密集型的,所以节点将正常运行


子进程确实是一个很好的工具,但很少需要它。当我听说它们时,我也想用一些,但问题是你肯定根本不需要它们。。。我决定使用它的唯一一次是创建一个CPU密集型工作线程。它将确保每个核心产生一个子进程(因为节点是单线程的),并重新启动任何错误的进程。

Javascript的最大好处是它的异步特性

调用异步函数时,代码将继续执行,而不是等待响应。当函数完成了,给出了答案,它就继续这个部分

您的数据库调用已经是异步的。因此,您将毫无代价地生成另一个节点进程。因为您的数据库承担了所有的热量,所以在这方面拥有更多的nodeJS进程是没有帮助的

以相同的示例为例,但使用文件写入。什么可以使磁盘写入速度更快?真的没什么。。。但我们在乎吗?没有,因为我们的nodej没有被阻塞,并且一直在应答请求和处理任务。您可能需要检查的唯一一件事是不要同时发送一千个文件写入,如果它们很大,则会对文件系统产生负面影响,但由于写入不是CPU密集型的,所以节点将正常运行


子进程确实是一个很好的工具,但很少需要它。当我听说它们时,我也想用一些,但问题是你肯定根本不需要它们。。。我决定使用它的唯一一次是创建一个CPU密集型工作线程。它将确保每个核心生成一个子进程(因为节点是单线程的),并重新生成任何有故障的子进程。

您的第一句话几乎让人觉得,当其他JavaScript函数运行时,JavaScript函数本身会继续执行。这不是真的-所有JS代码都是单线程的,不管是普通的、异步的、生成器的还是任何其他类型的函数。只有I/O操作是异步的,而不是JS代码。这是一个重要的区别。你指出这一点是对的,我解释得不够好。感谢您的添加您的第一句话几乎使它听起来好像JavaScript函数本身继续执行,而其他JavaScript函数正在运行。这不是真的-所有JS代码都是单线程的,不管是普通的、异步的、生成器的还是任何其他类型的函数。只有I/O操作是异步的,而不是JS代码。这是一个重要的区别。你指出这一点是对的,我解释得不够好。谢谢你的补充