Java多线程和Nodejs集群

时间:2018-07-27 07:40:24

标签: java node.js

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

虽然Java中的等效项是多线程...

我有一个运行在nodejs上的http侦听器(无集群),并且我正在使用Java将该Nodejs称为http(使用java.lang.Thread类)

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

2 个答案:

答案 0 :(得分:2)

NodeJS是单线程的。这意味着无论您进行多少次http调用,都会将它们排队并进行处理。如果您在几秒钟内使Node JS过载并有数百个呼叫,那么您的响应时间就会更长。

有关事件循环的信息,请参见this guide

编辑:我没有看到群集部分。它允许您使用多个实例,因此可以在处理器中使用更多的内核,并同时处理更多的操作。我会说,最好的办法是对许多操作进行基准测试,看看是否足以在几秒钟内处理数百个呼叫

答案 1 :(得分:1)

即使NodeJS是单线程的,但由于其Event Loop体系结构,异步操作还是在单独的线程中运行。

  

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

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

  

nodejs会成为瓶颈吗?

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

但是,重要的是要注意Java多线程应用程序和Node集群应用程序(或多进程)之间的区别。

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

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