【问题标题】:Difference between standard verticle and worker verticle标准verticle和worker verticle的区别
【发布时间】:2019-08-08 06:53:41
【问题描述】:

我对 Vertx 中的标准 verticle 和 worker verticle 感到困惑。 它们的用例是什么?

【问题讨论】:

  • 欢迎来到堆栈溢出,请浏览tour、帮助中心和How to Ask 部分,了解本网站的工作原理并帮助您改进当前和未来的问题,这可以帮助您你会得到更好的答案。也请查看How do I ask

标签: java vert.x vertx-verticle


【解决方案1】:

Vert.x 是一个事件驱动的非阻塞工具包。当一个“标准”verticle被执行时,它的逻辑在一个事件循环线程上运行。虽然该线程运行该 Verticle 的逻辑,但它不能服务任何其他请求,因此该线程不应执行任何阻塞代码。

但是,有时,您确实需要执行阻塞代码——进行长时间计算、同步调用外部服务等——在这种情况下,您需要确保不会发生这种情况在事件循环线程上。

你有两种方式来执行阻塞代码:

  • 使用一个worker verticle,它将执行其own thread pool中的代码,你可以根据需要进行配置;
  • 或使用executeBlocking 块,它在单独的线程中执行。

【讨论】:

  • 感谢您的回答。我在这里有一个疑问,如果我们正在执行异步 IO 操作,例如(DB 调用或外部 API 调用)那么这些语句不会在 Worker Verticle/Threads 中隐式执行,或者我们需要将该 Verticle 指定为 worker ..?在 nodejs 中,eventloop 会将此类事件(异步 IO 操作)推送到工作线程池,无需任何手动选项。
  • 除非您使用 Vert.x 原语和库来异步执行这些操作,否则您需要在 executeBlocking 块或工作程序 Verticle 中显式执行它们。
  • 感谢@sebastien,如果我使用 ASYNC API 执行 IO 操作,那么它会和 Nodejs 一样工作吗?通过将 IO 操作推入工作线程池并独立执行。
  • 据我了解,executeBlocking 在上下文切换上的成本要低得多。这篇文章帮助了我:redhat.com/en/blog/…
猜你喜欢
  • 1970-01-01
  • 2015-12-21
  • 2021-07-04
  • 2014-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-08
相关资源
最近更新 更多