多线程与群集

时间:2016-05-18 19:38:24

标签: node.js multithreading database-design architecture

我正在研究这两个概念之间的区别,我找不到以下场景的明确答案:

您在计算机上的不同端口上启动4个节点服务器。这些服务器都处理一个请求。

我认为这在理论上是多线程的。一个请求被委托给4个不同的节点服务器进行处理。

但是,因为节点是异步操作的,我还没有定义这4个服务器如何相互交互(节点1的作业然后转到节点2的作业?),我不认为这种情况没有某种主节点就可能。

这引出了我的下一个问题:

多线程也可以异步吗?对我而言,应该有一个原因,为什么这不是一个常见的编程范式,但我无法用语言表达一个确认它的例子

非常感谢!我通常会问编程问题,但我开始更多地研究系统设计

1 个答案:

答案 0 :(得分:0)

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

  

我认为这在理论上将是多线程的。一个请求委托给4个不同的节点服务器进行处理

您可以通过为CPU中的每个可用核心创建节点进程和/或通过在多个计算机实例中部署进程来扩展Node应用程序。但是,请务必注意多线程应用程序和节点群集应用程序(或多进程)之间的区别。

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

多线程也可以异步吗?

是的,异步编程使您能够在完成之前停止和继续执行任务,另一方面,多线程系统允许任务并行运行。因此,您可以拥有一个在不同线程之间运行,停止和恢复任务的系统。

相关问题