当前位置: 首页 > 知识库问答 >
问题:

如何使用I/O线程?

松增
2023-03-14

根据该条: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最终版

我错过了什么?

共有1个答案

安浩瀚
2023-03-14

检查当前线程是否是类型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模型

  • I/O

    注:本节未经校验,如有问题欢迎提issue 介绍 akka.io包是由Akka和spray.io团队协作开发的。它的设计结合了spray-io模块的经验,并共同进行了改进,使其适应基于actor服务的更加普遍的消费需求。 该 I/O 实现的指导设计目标是要达到极端的可扩展性,要毫不妥协地提供一个API正确匹配底层传输机制,并且是完全的事件驱动、无阻塞和异步。该API命中注定是网络协议实现和构建更高

  • I/O

    目标 了解 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约束。这也表明该过程所做的阅读工作远胜于写作。 但是,我还没有找到确定要读取或写入 哪些 文件以及执行多少次的好方法。我的怀疑是,随着我们的许多子项目以及随