根据该条:https://quarkus.io/blog/resteasy-reactive-smart-dispatch/我应该能够通过使用@NonBlocking
“just”注释方法来使用I/O线程。
当使用最新的夸克快速入门并修改入门示例时:
@Path("/hello")
public class GreetingResource {
@Inject
GreetingService service;
@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("/greeting/{name}")
@Blocking
public String greeting(@PathParam String name) {
System.out.println( "greeting, isWorker: " + ( (io.vertx.core.impl.VertxThread)Thread.currentThread() ).isWorker() );
return service.greeting(name);
}
@GET
@Produces(MediaType.TEXT_PLAIN)
@NonBlocking
public String hello() {
System.out.println( "hello, isWorker: " + ( (io.vertx.core.impl.VertxThread)Thread.currentThread() ).isWorker() );
return "hello";
}
}
我希望为hello
方法获得一个I/O线程。然而,结果是:
2021-12-28 14:07:17,990 INFO [io.quarkus] (Quarkus Main Thread) getting-started 1.0.0-SNAPSHOT on JVM (powered by Quarkus 2.6.1.Final) started in 0.543s. Listening on: http://localhost:8080
2021-12-28 14:07:17,990 INFO [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated.
2021-12-28 14:07:17,991 INFO [io.quarkus] (Quarkus Main Thread) Installed features: [cdi, resteasy, smallrye-context-propagation, vertx]
2021-12-28 14:07:17,991 INFO [io.qua.dep.dev.RuntimeUpdatesProcessor] (vert.x-worker-thread-0) Live reload total time: 0.676s
hello, isWorker: true
greeting, isWorker: true
因此,在这两种情况下(根据vert.x-worker-thread),都是一个工作线程,而不是I/O线程。
QUUKUS版本是2.6.1最终版
我错过了什么?
检查当前线程是否是类型io.vertx.core.impl.VertxThread
不是检查您是否在事件循环上的方法,因为相同类型的线程也可以用于工作池。
正确的方法来做此检查在Quarkus是使用:
var onEventLoop = !io.quarkus.runtime.BlockingOperationControl.isBlockingAllowed()
I/O多路复用常用于I/O操作可能会被阻塞的情况 select()出自BSD系统,poll()出自 System V系统。两者原理等价,实现方式不同。POSIX.1定义了两者。 epoll()出自Linux2.6,其他Unix系统无此函数,BSD系统(包括OSX系统)有类似的函数kequeue() select poll epoll模型
注:本节未经校验,如有问题欢迎提issue 介绍 akka.io包是由Akka和spray.io团队协作开发的。它的设计结合了spray-io模块的经验,并共同进行了改进,使其适应基于actor服务的更加普遍的消费需求。 该 I/O 实现的指导设计目标是要达到极端的可扩展性,要毫不妥协地提供一个API正确匹配底层传输机制,并且是完全的事件驱动、无阻塞和异步。该API命中注定是网络协议实现和构建更高
目标 了解 java.io.File 类的主要用途 了解如何使用字节流和字符流 了解如何从文件读取数据和向其中写入数据 处理外部数据 您在 Java 程序中使用的数据通常来自外部数据来源,比如数据库、通过套接字直接传输的字节或文件存储。大部分收集和处理外部数据的 Java 工具都包含在 java.io 包中。 文件 在所有可用于 Java 应用程序的数据来源中,文件是最常见的,通常也是最方便的。如
80386的I/O指令使得处理器可以访问I/O端口,以便从外设输入数据,或者向外设发送数据。这些指令有一个指定I/O空间端口地址的操作数。有两类的I/O指令: 1、 在寄存器指定的地址传送一个数据(字节、字、双字)。 2、 传送指定内存中的一串数据(字节串、字串、双字串)。这些被称作为“串 I/O指令”或者说“块I/O指令”。 8.2.1 寄存器I/O指令(Register I/O Instruc
80386 允许以以下的两种方式操作输入、输出: 通过独立的I/O地址空间(使用特定的I/O指令) 通过内存映射I/O(使用一般的指令操作数)
问题内容: 我们的构建令人讨厌。这是一个用Ant构建的Java系统,我正在Windows XP上运行我的Java系统。取决于硬件,可能需要5到15分钟才能完成。 观察计算机上的总体性能指标,以及将硬件差异与构建时间相关联,表明该过程受I / O约束。这也表明该过程所做的阅读工作远胜于写作。 但是,我还没有找到确定要读取或写入 哪些 文件以及执行多少次的好方法。我的怀疑是,随着我们的许多子项目以及随