Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js:在发出事件之前阻止线程_Javascript_Multithreading_Node.js_Threadpool - Fatal编程技术网

Javascript Node.js:在发出事件之前阻止线程

Javascript Node.js:在发出事件之前阻止线程,javascript,multithreading,node.js,threadpool,Javascript,Multithreading,Node.js,Threadpool,我正在尝试制作一个简单的服务器,它有一些重负载处理。我使用集群模块将这个沉重的负载转移到线程上,让节点发挥它的魔力。问题是:由于我不知道如何构建线程池,我担心我可能会在pid限制方面遇到一些麻烦 问题:如果我不能更改进程标识符OS限制,我如何创建一个节点不死亡的线程(一个等待消息、处理消息然后等待另一消息的线程),而不使用繁忙等待(我希望它们在等待新请求时阻塞) 我无法得到您所要求的,但是节点集群意味着产生一个常量工作者数量(通常每个CPU核心一个),以支持对您的请求进行多线程处理 每个工人在一

我正在尝试制作一个简单的服务器,它有一些重负载处理。我使用集群模块将这个沉重的负载转移到线程上,让节点发挥它的魔力。问题是:由于我不知道如何构建线程池,我担心我可能会在pid限制方面遇到一些麻烦


问题:如果我不能更改进程标识符OS限制,我如何创建一个节点不死亡的线程(一个等待消息、处理消息然后等待另一消息的线程),而不使用繁忙等待(我希望它们在等待新请求时阻塞)

我无法得到您所要求的,但是节点集群意味着产生一个常量工作者数量(通常每个CPU核心一个),以支持对您的请求进行多线程处理

每个工人在一个线程中工作,只消耗一个pid。所有工作者共享相同的TCP连接,允许在他们之间分发请求。每个工作线程在其单个线程中异步(同时)处理调度到id的所有请求

Node.js旨在通过异步处理所有传入请求来利用单个CPU核心的所有资源,这意味着利用所有资源不需要超过
numpus
工人

所以,我不能理解你的pid限制问题

如果在配置群集时遇到问题,请参阅和


总结我的答案,正确配置的集群由
require('os').cpus()组成。长度
处理请求的工作进程和一个监视请求并使死机复活的主进程。

您将达到什么PID限制?如果您创建了这么多进程或线程,那么您达到了最大上限,您创建了太多的进程或线程。正如您所注意到的,Node并没有使这类工作变得简单。节点最适合用于事件IO,而不是处理。有比Node更自然的线程平台。pid在机器实例中是独一无二的。如果你产生32k个进程(即使有些进程已经死了),如果我没有弄错的话,你最终会达到最大pid值(这会给你一个错误)。你弄错了。它们被重复使用。如果您有32K个活动进程,那么您的机器工作过度,并且花费太多时间在线程/进程之间切换上下文,而不是执行实际工作。另外,正如我所说,NodeJS对于“重载处理”来说不是一个很好的匹配。很好,我不知道回收。干得好!它解决了我的问题,我明白了。你是说,如果我在一台4核机器上运行Node,最大的重量级线程数是4?是的。可以产生超过
numpus
的工作者,但您不需要这样做。但是正如贝拉蒂所说,节点不是处理重负载请求的坏选择,尽管它是处理大量光的完美选择。因此,如果你的目标是向工人发送繁重的操作,那么你应该考虑使用非No.js。