使用rabbitmq与multithreading之间的差异

如果我错了,请纠正我,但是,我正在Ruby中开发一段时间,其中最明显的缺点之一是缺lessmultithreading。 最近我一直在探索节点js,特别是它的非阻塞IO“function”。 我的问题是:

  1. 为什么要使用单线程语言并使用rabbitmq来asynchronous实现,如果只能使用像js这样的multithreading语言,那么可以同时触发1000个请求并同时完成它们?
  2. 节点js是否有其他multithreading语言的创新? 我想我真正要问的是:节点js非阻塞IO和multithreading之间有区别吗?

nodeJS 不是multithreading的 。 它是单线程的 ,但是IO发生在单线程之外。 一种方式来标注它:“一切都是平行的,但你的代码”。

所以节点很简单 – 只有一个线程 。 一次只能执行一行代码 。 然而,IO操作(从磁盘读取等)确实是“非阻塞”的,所以当IO操作发生时,你的代码将继续运行。 当IO结束时,执行您提供IO操作的callback。

要明确回答你的问题:

  1. 使用节点,你的1000个请求不会被正确地处理 – 但是IO部分可能(操作系统会这样做,在你的代码之外)。 在实际应用程序中运行的部分仍然是非常顺序的,但是返回顺序将取决于完成IO的顺序,这不在您的手中。

    更重要的是,如果您使用消息传递scheme执行asynchronous操作(在完成请求之后),您将在与主要“聆听”过程不同的过程中执行后台任务。 因此,如果“背景”过程崩溃,您的听觉过程仍然存在。

  2. 如上 – Node有一个非阻塞的单线程。 在multithreading语言中,你的代码将是并行的(因此你可能不得不处理线程安全等令人兴奋的事情),但是每个请求都会阻塞,直到它执行的任何IO完成。