【问题标题】:multi-threading vs. clustering多线程与集群
【发布时间】:2016-09-15 11:26:43
【问题描述】:

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

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

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

但是,由于节点是异步运行的,我还没有定义这 4 个服务器如何相互交互(节点 1 的作业是否会转到节点 2 的作业?),我不认为这种情况没有某种主节点也是可能的。

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

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

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

【问题讨论】:

    标签: node.js multithreading database-design architecture


    【解决方案1】:

    尽管 NodeJS 是单线程的,但由于其 Event Loop 架构,异步操作在单独的线程中运行。

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

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

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

    多线程也可以异步吗?

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

    【讨论】:

      猜你喜欢
      • 2015-07-16
      • 2020-02-14
      • 1970-01-01
      • 1970-01-01
      • 2011-11-28
      • 2019-12-04
      • 1970-01-01
      • 1970-01-01
      • 2016-02-07
      相关资源
      最近更新 更多