Java多线程和Nodejs集群

Java多线程和Nodejs集群,java,node.js,Java,Node.js,我们可以使用nodejs群集运行多个进程 java中的等价物是多线程 我有一个http侦听器在nodejs上运行(没有集群),我正在使用Java调用这个nodejs http(使用Java.lang.Thread类) 如果我同时有300个请求,它会创建多个nodejs实例吗?nodejs会成为瓶颈吗?nodejs是单线程的。这意味着无论您进行多少次http调用,它都将对它们进行排队和处理。如果在几秒钟内用数百个待命节点重载Node JS,您将需要更长的响应时间 有关更多信息,请参阅关于事件循环

我们可以使用nodejs群集运行多个进程

java中的等价物是多线程

我有一个http侦听器在nodejs上运行(没有集群),我正在使用Java调用这个nodejs http(使用Java.lang.Thread类)


如果我同时有300个请求,它会创建多个nodejs实例吗?nodejs会成为瓶颈吗?

nodejs是单线程的。这意味着无论您进行多少次http调用,它都将对它们进行排队和处理。如果在几秒钟内用数百个待命节点重载Node JS,您将需要更长的响应时间

有关更多信息,请参阅关于事件循环


编辑:我没有看到群集部件。它将允许您使用多个实例,从而在处理器中使用更多内核,同时处理更多操作。我想说的是,最好的做法是对大量操作进行基准测试,看看它是否足以在几秒钟内处理数百个调用

即使NodeJS是单线程的,但由于其体系结构,异步操作在不同的线程中运行

如果我同时有300个请求,它会创建多个nodejs实例吗

否,除非您正在运行节点群集,否则只有单个节点进程(和线程)将处理请求

nodejs会成为瓶颈吗

如果您的大部分工作是异步的,那么它将能够并行执行这些任务,而不应该成为瓶颈。此外,您还可以通过为CPU中的每个可用核心创建节点进程和/或在多个计算机实例中部署该进程来扩展应用程序

但是,必须注意Java多线程应用程序和节点集群应用程序(或多进程)之间的区别

  • 进程通常是独立的,而线程作为进程的子集存在
  • 进程携带的状态信息比线程多得多,而 进程内的线程共享进程状态以及内存和其他资源
  • 进程有单独的地址空间,而线程共享它们的地址空间
  • 进程只通过系统提供的进程间通信机制进行交互 同一进程中线程之间的上下文切换通常比进程之间的上下文切换快

因此,如果您的环境中内存不足,并且您的实例具有多核处理器,那么NodeJ可能确实会成为瓶颈。

取决于服务器的设计方式。如果只有一个NodeJS实例,那么来自Java的所有300个并发请求都将被定向到只有一个NodeJSI实例的NodeJS服务器,并且只有一个instance和一个侦听器。这意味着来自Java的所有调用(并发)都将排队,并在nodejs?Hi@S.Miranda中逐个处理。谢谢你的回复。您对在NodeJ上更快地处理此问题有什么建议吗?由于java端已经在运行多线程,所以nodejs部分是这里的瓶颈。您是否能够在集群模式下在节点JS端尝试很多http调用?我认为您不必看到自己陷入瓶颈,如果您将node JS实例的数量配置为与Java实例的数量相同,您将不会有任何问题,但需要进行测试。即将进行测试。同时,想接受更多的建议:迪发现。这是从2015年开始的,但我认为您可以自信地处理数百个HTTP请求:)这与您所做的并不完全相关,而是展示了Chrome V8引擎的强大功能“这意味着无论您进行多少次HTTP调用,它都将对它们进行排队和处理。”仅当该请求处理100%受CPU限制或阻塞时。如果您在其中进行数据库调用(或其他异步工作负载),那么可以将单个线程多路复用以处理多个请求。