【问题标题】:Calling multiple web-services - Node.js vs green threads调用多个 Web 服务 - Node.js 与绿色线程
【发布时间】:2013-07-06 16:44:25
【问题描述】:

我的网络服务器必须调用 3-4 个网络服务。我打算在 Node.js 中实现它,但由于我不是回调代码的忠实拥护者,因此正在考虑 gevent。我知道绿色线程在行为上与操作系统线程相似,每个线程在调用下一个之前都会等待一个 Web 服务的响应。这是正确的吗?

例如,如果我正在调用 Web 服务 A、B、C、D,每个服务需要 1 秒,节点将在 1 秒内完成所有 4 个(由于并行调用),但 gevent 需要 4 秒(因为它一个接一个地链接它们)。

【问题讨论】:

    标签: javascript web-services node.js gevent green-threads


    【解决方案1】:

    基本上,gevent 子任务在遇到阻塞操作时会互相让步。我不是节点专家,但我相信这也是节点运行的方式。一个很好的例子在这里: http://sdiehl.github.io/gevent-tutorial/#synchronous-asynchronous-execution

    【讨论】:

      【解决方案2】:

      gevent 的文档明确指出多个作业可以同时运行 (http://www.gevent.org/intro.html#example)。由于它在底层使用LibUV 并且具有与nodejs 类似的主事件泵,因此这两种方法将非常相似,但在不同的编程环境和语法中运行。选择你喜欢的任何口味。

      【讨论】:

      • 感谢您的回答。我了解不同的绿色线程如何同时调用 Web 服务(VM 的线程调度)。你能解释一下一个绿色线程是如何并行执行多个调用的吗?
      • 我认为“绿线”一词在这里不合适;没有进行仿真。这个过程依赖于操作系统,我最熟悉Windows,所以我将描述它的简化系统,IOCP(输入/输出完成端口)。应用程序将告诉操作系统检索资源并在完成后发送消息。主事件泵将继续执行您的应用程序提供的任务,一旦它注意到操作系统消息,它会将完成添加到要处理的事件泵中。因此调度了多个资源,并且一个线程可以处理完成事件。 :-)
      • gevent 实际上在后台使用 libev,而不是 libuv。这些库做的事情几乎相同,只是 libuv 在 Windows 上有更好的支持。
      猜你喜欢
      • 2011-08-08
      • 1970-01-01
      • 2012-01-06
      • 1970-01-01
      • 1970-01-01
      • 2012-04-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多