Tag: 分叉

控制进程分配给处理器

fork是否总是在一个单独的处理器中创build一个进程? 有没有办法,我可以控制分配到一个特定的处理器。 例如,如果我有2个处理器,并希望fork创build一个并行进程,但在包含parent进程的同一处理器中。 NodeJS是否为此提供了任何方法? 我正在寻找对进程分配的控制权。 这是个好主意吗? 另外,可以分叉的最大进程数是多less,为什么?

当我开始新的进程时,NodeJS fork进程正在减慢所有其他分叉的进程

我有一个NodeJS程序,它使用ImageMagick从我的数据库中的一些文本创build一个图像。 该程序是从我的NodeJs服务器使用 import childProcess from 'child_process'; let args = [':imageId', '–max_old_space_size=4096']; childProcess.fork('createImage.js', args); 创build图像的过程非常缓慢,在本地机器上可能需要5-6分钟才能处理尺寸为114x84cm的单张图像。 我将尝试解释程序生命周期中发生的事情。 所以,我有服务器上运行的进程MyServer ,当有人请求一个图像MyServer派生一个新的进程。 新的进程ImageCreator1有一个来自promise的循环,并将等到所有的解决。 每个承诺使用ImageMagick创build一个大的图像的一部分 在我的活动监视器中,我可以看到有一些正在运行的进程 Process Name | %CPU MyServer – 0.3 ImageCreator1 – 30.0 convert – 0.1 convert – 0.1 convert – 0.2 convert – 0.1 另外我可以看到ImageCreator1运行asynchronous4-5 ImageMagick转换进程来创build所有这些需要的小图片。 这一切将需要5分钟。 创造大的形象。 所以当我启动两个ImageCreators的时间增加到9 ImageCreators 。 Process Name | %CPU MyServer – […]

在节点中使用fork共享所需的模块

我有一个模块(如内部API),创build一个连接到数据库,并调用数据库。 我想在一个节点项目中使用它,但我正在使用fork来创buildsubprocess。 我希望这个模块在父进程中初始化一次,并以某种方式与其他进程共享(因为我不希望每次在每个subprocess中初始化)。 我正在尝试使用child.send({..})方法,但它不工作。 与child.send({..})的问题是,当我发送对象作为消息不会提供任何function。 subprocess是否可以通过父模块访问或通过消息传递函数?

NodeJS批处理多处理 – 池中的subprocess(或multithreading)

NodeJS批量多 穿线 处理 – 池中的subprocess。 我知道一个孩子的过程是一个过程,而不是一个线程。 我使用了错误的语义,因为当你提到“multithreading”时,大多数人都知道你的意图是什么。 所以我会把它保留在标题中。 设想一个场景,您不断地使用一个自定义函数或模块来执行多个相似和复杂的事情。 使用所有可用的核心/线程(例如8/16)是child_process.fork() ,这是child_process.fork()的用途。 理想情况下,您将需要一个同步的工作人员和一个控制器发送/callback消息。 node-cpool , fork-pool , child-pool是一些完全可以做到这一点的模块,但是它们似乎是旧的/无法维护的。 有很多类似的模块,但是这些模块似乎是最相关的。 他们都有共同的几个承诺,几乎没有出演,几乎没有分叉,并放弃。 通常情况下,当我找不到任何东西似乎是有意义的任何东西,是有一个更好的方式,我失踪了。 因此我的问题。 我如何有一个pipe理,排队, multithreading 并行fork()的池为我的自定义模块,做一些CPU密集型工作? 像TAGG和webworker-threads这样的multithreading模块是不一样的,因为它们不支持完整的模块(使用二进制编译的组件)。 PS 我现在正在使用fork-pool ,它似乎正是我想要的,有一些怪癖,但是我不能相信这样一个未知的和不受欢迎的模块将是唯一可行的select。

是否有可能在Node.js中分叉一个JavaScript函数?

我尝试从我的主JavaScript文件执行长时间运行的函数。 我有2 cpu,所以我怎么才能分叉function?

将GitHub项目的分支发布到新的NPM模块,但保留与原始合并的选项?

GitHub和NPM上存在一个高质量的开源代码库,拥有广泛的用户群。 我已经分出了这个项目并做了大量的扩展。 我认为准备合并回来。 但(适当地)它的项目所有者谁打电话不是我。 现在已经有几个星期没有答复了。 有几位用户就这个被合并回来的问题进行了讨论,并且更多的直接和我联系,作为一个单独的项目发布到NPM上。 严重的开发人员可以通过GitHub获得新版本,但它只是原始资源,而不是链接/缩小/定制版本,因为自述文件说不要运行make dist直到它合并回来并且版本号递增。 我认为它应该像创build这个分支的分支一样简单,并将其作为一个新的NPM模块发布。 但GitHub不允许我这样做(“你已经在看这个项目”) 有没有一种方法可以将其作为新的NPM模块发布,但仍然保留选项 我的叉子向原始提交拉请求 我的叉子从原来的上游变化 我的分叉来从我的叉(从而原来的)获取上游变化 我是否在新的电子邮件地址下创build新的GitHub帐户? 叉在GitHub我的回购叉

Node.js child_process.fork()在不同的CPU核心上运行

我有一个运行长时间执行的进程的应用程序。 为了使它更快,我做了简单的数据分片,并且希望并行地运行它们,只需通过.fork()2个相同应用程序的实例。 我在那里有2个Cores机器,并且要确保2个Cores被利用,第一个实例在第一个核心上运行,第二个在第二个核心上运行。 我知道cluster模块,但在这种情况下似乎不相关,因为我不需要HTTP服务运行和它们之间的负载平衡。 只是工作人员(意思是说,他们不需要彼此沟通,发送消息或任何 – 他们只是做HTTP请求和存储数据到数据库)。 有没有可能控制node.js进程需要哪个CPU核心? 如何监视在Mac / Linux?

有没有办法在Node.JS中的worker / threads / something中共享内存?

我有一个Node应用程序访问一个静态的,大型(> 100M),复杂的内存数据结构,接受查询,然后通过HTTP向客户端提供一小部分的数据。 大多数查询可以在十分之一秒内回答。 华丽的节点! 但是,对于某些查询,search这个数据结构需要几秒钟的时间。 这很糟糕,因为其他人都必须等待。 为了更有效地服务更多的客户,我想使用某种并行性。 但是,由于这个数据结构如此之大,我想在工作者或者线程之间分享,或者你有什么,所以我不会烧数百兆字节。 这将是完全安全的,因为数据结构不会被写入。 任何其他语言的典型“fork()”都可以。 但是,据我所知,在Node中执行并行的所有标准方法明确地使这是不可能的。 为了安全,他们不希望你分享任何东西。 但有没有办法? 背景: 把这个数据结构放在数据库中,或者使用memcached或者类似的东西是不切实际的。 WebWorker API库和类似的只允许简短的序列化消息传入和传出工作人员。 节点的群集使用名为“叉”的调用,但它不是真正的现有过程的叉,它正在产生一个新的。 所以再一次,没有共享的记忆。 可能真正正确的答案是使用文件系统访问共享内存,也就是tmpfs或mmap。 有一些节点库使得mount()和mmap()完全可以用于这样的事情。 不幸的是,人们必须在同步查询和读取之上实现复杂的数据结构访问。 我的应用程序使用数组的字典等数组。 不用重新实现就好了。