Java Vertx 3.4:立即运行代码与context.runOnContext之间的差异

Java Vertx 3.4:立即运行代码与context.runOnContext之间的差异,java,vert.x,Java,Vert.x,我正在尝试了解Vertx的基本知识。我正在浏览关于它的标准文档,在那里我偶然发现了一个关于上下文对象的部分。它表示,通过提供名为runOnContext的方法,您可以在以后运行代码。我不明白的是,在哪种情况下,我会选择稍后调用(非阻塞)代码块?如果代码是非阻塞的,那么无论您现在执行还是以后执行,都需要相同的时间 谁能告诉我,在这种情况下,context.runOnContext会很有帮助吗?通常,如果您从另一个线程调用它,它会很有帮助。它将通过绑定到此上下文的事件循环安排任务执行 如果您已经在事

我正在尝试了解Vertx的基本知识。我正在浏览关于它的标准文档,在那里我偶然发现了一个关于上下文对象的部分。它表示,通过提供名为
runOnContext
的方法,您可以在以后运行代码。我不明白的是,在哪种情况下,我会选择稍后调用(非阻塞)代码块?如果代码是非阻塞的,那么无论您现在执行还是以后执行,都需要相同的时间


谁能告诉我,在这种情况下,
context.runOnContext
会很有帮助吗?

通常,如果您从另一个线程调用它,它会很有帮助。它将通过绑定到此上下文的事件循环安排任务执行


如果您已经在事件循环中,那么在从队列中读取项目时也可以使用它:您可以为队列中的每个项目安排一个事件,而不是将所有项目作为单个事件处理。这将使其他类型的事件(网络、文件系统)有机会更早地得到处理。

您能举一个例子说明第二点吗?我也会说同样的话,但我试过了,但实际上没有用。将CPU限制的任务分成更小的块并单独调度仍然会阻止HTTP请求,例如,直到所有处理完成(或者我做错了)。你所说的第一点当然是正确的,但这不是链接文档所显示的用例。也许这是你代码中的一个问题。如果运行
Vertx Vertx=Vertx.Vertx();Context Context=vertx.getOrCreateContext();context.runOnContext(v1->{System.out.println(“一”);context.runOnContext(v2->{System.out.println(“两”);});System.out.println(“三”);})你会看到:“一,三,二”不,它是有效的,我不反对这个。我所说的是“给其他类型的事件(网络、文件系统)一个更早处理的机会”,但事实并非如此。如果将代码从3增加到runOnContext,并并行启动httpserver,则所有http请求都会暂停,直到所有runOnContext调用完成。也许我应该写我自己的问题,用示例代码来说明这一点……如何,现在我明白了。任务是按顺序处理的,因此如果您使用runOnContext提交一组任务并最终启动HTTP服务器,那么,是的,HTTP服务器事件将在任务之后处理。我们如何知道“我们是否在事件循环中”?