在vertx.executeBlocking代码中使用mybatis代码有什么大问题吗?
Is there any big problem using mybatis code in vertx.executeBlocking code?
我想使用MyBatis
在EclipseVert.x中读写数据库。 Vert.x官方推荐使用executeBlocking
来处理blocking code.
在vertx.executeBlocking代码中使用MyBatis代码有什么大问题吗?需要注意什么?
在Vert.x中,使用vert.executeBlocking或Worker Verticles到运行一个阻塞jdbc代码的程序,性能和并发性将不如传统的阻塞程序?
澄清:Vert.x 声明如果您绝对必须 使用阻塞代码,您可以将其包装到 "executeBlocking" 中。这样做绝对不是推荐或好的做法。
首先,executeBlocking 将 运行 在默认的工作线程池上,默认情况下,对于长 运行ning 任务来说,该线程池非常小 - 20 个线程。
其次,如果您从 EventLoop verticles(例如路由器)调用它,由于线程亲和性,您的并发性会更差。基本上,这将导致阻塞线程池的大小等于 CPU 核心数。
如果您的应用程序不需要扩展并且不需要吞吐量——那可能没问题。但也许 Vert.x 无论如何都不是最佳选择。
更具可扩展性的方法是 运行 您的数据库代码在一组 worker verticles 中,使用 EventBus 与您的处理程序通信。
我想使用MyBatis
在EclipseVert.x中读写数据库。 Vert.x官方推荐使用executeBlocking
来处理blocking code.
在vertx.executeBlocking代码中使用MyBatis代码有什么大问题吗?需要注意什么?
在Vert.x中,使用vert.executeBlocking或Worker Verticles到运行一个阻塞jdbc代码的程序,性能和并发性将不如传统的阻塞程序?
澄清:Vert.x 声明如果您绝对必须 使用阻塞代码,您可以将其包装到 "executeBlocking" 中。这样做绝对不是推荐或好的做法。
首先,executeBlocking 将 运行 在默认的工作线程池上,默认情况下,对于长 运行ning 任务来说,该线程池非常小 - 20 个线程。
其次,如果您从 EventLoop verticles(例如路由器)调用它,由于线程亲和性,您的并发性会更差。基本上,这将导致阻塞线程池的大小等于 CPU 核心数。
如果您的应用程序不需要扩展并且不需要吞吐量——那可能没问题。但也许 Vert.x 无论如何都不是最佳选择。
更具可扩展性的方法是 运行 您的数据库代码在一组 worker verticles 中,使用 EventBus 与您的处理程序通信。