招呼
我想知道我是否创建了一个vertx httpServer并添加了一个处理程序类来处理请求。处理程序实例内的代码会在同一个线程(事件循环线程)中执行,还是会在单独的线程/线程池中异步执行,并且不会减慢HTTPServer侦听新请求的操作?
目前,我有一个Handler实例(一个实现Handler接口的Spring signelton bean)。当对httpserver的大量HTTP请求到达时,处理程序代码会缓慢处理请求(请求在请求完成很长时间后执行,但不抛出vertx ThreadBlock异常)
简而言之,答案是肯定的。每个服务器垂直链接都绑定到一个事件循环线程。每个处理程序都绑定到同一个线程。很容易检查:
public static void main(String[] args) {
Vertx vertx = Vertx.vertx();
vertx.deployVerticle(new ServerVerticle());
}
public static class ServerVerticle extends AbstractVerticle {
@Override
public void start() {
Router router = Router.router(vertx);
router.get("/").handler((r) -> {
System.out.println("Handler " + Thread.currentThread().getName());
r.response().end("");
});
System.out.println("Main verticle " + Thread.currentThread().getName());
vertx.createHttpServer().requestHandler(router::accept).listen(8888);
}
}
访问服务器,您会注意到您的处理程序与服务器在同一个事件循环线程上。
如果您有工作缓慢的处理程序,请使用EventBus和工作器顶点:
http://vertx.io/docs/vertx-core/groovy/#worker_verticles
我有一个程序,当你点击按钮,它将执行一个名为
是否可以在与“主”应用程序分开的线程池中处理像这样的执行器请求? 我为什么要问?我有一个应用程序有时可能会用完所有可用的线程,而Kubernetes健康检查由于没有线程来计算健康endpoint请求而失败。 我希望确保无论应用程序的负载有多大,都处理了每个健康请求。 我在考虑可能定义一个单独的线程池来操作执行器,但我不确定如何做到这一点。
问题内容: 我有一个包含单元测试的Go文件,其中一些使用了公共变量。我正在测试的代码中使用了另一个全局变量。所有这些都可能导致问题。 在Go中,当我们执行位于同一文件中的测试时,它们如何运行?并行还是下一个不会在前一个完成之前开始? 问题答案: 测试起来真的很容易: 使用运行它,输出显示它是顺序的: 因此,正常的测试是依次执行的,但是请不要忘记未定义顺序:如何依次运行golang测试? 还要注意,
在我目前使用Netty的大多数示例中,我看到boss执行器是一个缓存线程池。根据我的理解,事件循环应该只有一个线程,为什么我们需要boss事件循环的缓存线程池?
运算操作是在Java代码中执行还是在Mysql的where子句中执行 假如age建立了索引,现在要对所有要查询的age进行一个加一操作,那么这个操作是放在Java代码中好还是SQL语句中好 放在SQL语句时的Mybatis代码 本来是觉得直接放在SQL语句中就行,但想着如果在where子句中进行表达式操作会造成索引失效,就在考虑
我有一个包含GWT UI和服务器后端的GWT项目。服务器后端包含通过GWT的RPC向UI公开的Java GWT服务。 由于项目已经有了很大的增长,随着后端需要越来越多的时间来启动,我正在考虑将UI移到一个单独的项目中,想法是在一个单独的VM中运行后端。后端比较稳定,是我们花时间最多的UI。在单独的VM中使用这两个,我们可以更有效地处理UI,因为我们只需要重新加载UI(在GWT开发模式下)并让后端运