【问题标题】:difference between using rabbitmq vs multi threading使用rabbitmq与多线程之间的区别
【发布时间】:2014-06-04 01:25:37
【问题描述】:

如果我错了,请纠正我,但是, 我在 Ruby 中开发了一段时间,其中一个最明显的缺点是缺少多线程。 最近我一直在探索 node js,尤其是它的非阻塞 IO“特性”。 我的问题是:

  1. 当您可以使用像 node js 这样的多线程语言,您可以并行触发 1000 个请求并且它们都同时完成时,为什么要使用单线程语言并使用rabbitmq 来实现异步?
  2. node js与其他多线程语言相比有什么创新吗?我想我真正要问的是:node js非阻塞IO和多线程之间有区别吗?

【问题讨论】:

  • 也许有更好的论坛/方式来问我的问题?

标签: multithreading node.js architecture rabbitmq


【解决方案1】:

nodeJS 不是多线程的。它是单线程,但 IO 发生在该单线程之外。一种流行语:“除了你的代码,一切都是并行的”。

所以节点很简单 - 只有一个线程。一次只执行一行代码。但是,IO 操作(从磁盘读取等)确实是“非阻塞”的,因此您的代码在 IO 操作发生时继续运行。当 IO 结束时,执行您提供的 IO 操作的回调。

明确回答您的问题:

  1. 使用 Node,您的 1000 个请求将无法准确处理 同时——但 IO 部分可能(操作系统会这样做, 在您的代码之外)。在您的实际应用程序中运行的部分 仍将是非常连续的,但退货顺序将取决于 关于完成 IO 的顺序,这不在你的手中。

    更重要的是,如果您使用消息传递方案来执行异步 操作(完成请求后)您执行后台 任务在一个单独的过程中,而不是你的主要“倾听”过程。 因此,如果“后台”进程崩溃,您的监听进程是 还活着。

  2. 如上所述 - 节点有一个非阻塞线程。在一个 多线程语言,您的 代码 将是并行的(因此您 可能必须处理线程安全等令人兴奋的事情),但每个 请求将阻塞,直到它执行的任何 IO 完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 2020-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多