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

下面如何做无阻塞IO?

贲培
2023-03-14
public class App {
    public static void main(String[] args) {
        Undertow server = Undertow.builder().addListener(8080, "localhost")
                .setHandler(new HttpHandler() {

                    public void handleRequest(HttpServerExchange exchange) throws Exception {
                        Thread.sleep(5000);
                        exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain");
                        exchange.getResponseSender().send("Hello World");
                    }

                }).build();
        server.start();
    }
}

这一次,第一个选项卡将等待5秒,第二个选项卡将等待10秒

为什么会这样?

共有1个答案

李景天
2023-03-14

HttpHandler在I/O线程中执行。如文件所述:

IO线程执行非阻塞任务,并且永远不应该执行阻塞操作,因为它们负责多个连接,所以当操作阻塞时,其他连接基本上会挂起。每个CPU内核一个IO线程是合理的默认情况。

请求生命周期文档讨论如何将请求分派给辅助线程:

import io.undertow.Undertow;
import io.undertow.server.*;
import io.undertow.util.Headers;

public class Under {
  public static void main(String[] args) {
    Undertow server = Undertow.builder()
        .addListener(8080, "localhost")
        .setHandler(new HttpHandler() {
          public void handleRequest(HttpServerExchange exchange)
              throws Exception {
            if (exchange.isInIoThread()) {
              exchange.dispatch(this);
              return;
            }
            exchange.getResponseHeaders()
                    .put(Headers.CONTENT_TYPE, "text/plain");
            exchange.getResponseSender()
                    .send("Hello World");
          }
        })
        .build();
    server.start();
  }
}
 类似资料:
  • 本文向大家介绍怎样做到js无阻塞加载?相关面试题,主要包含被问及怎样做到js无阻塞加载?时的应答技巧和注意事项,需要的朋友参考一下 优化脚本位置,将js资源放在最后 减少外链脚本数量,将js资源压缩,优化速度 在页面加载完毕后再去加载脚本,window.onload里取加载脚本 script标签的defer与async属性 4.1 defer 异步下载,但是按照脚本顺序且是在dom渲染好后执行 4

  • 基本问题:Spring反应器WebClient如何实现非阻塞时,与RestTem板相比?在将请求发送到外部服务(例如)后,它是否必须在某个地方阻塞?HTTP本质上是同步的,对吗?所以调用应用程序必须等待响应?线程如何知道上下文,以便对来自服务的响应做出反应?

  • 我有一个带感应帽的覆盆子皮。我制作了一个二进制时钟,我想在Sense hat的显示器上显示并保持更新。然而,我想要的能力,开关时钟与操纵杆中间。一切都很好,除了我的时钟的更新循环阻止任何新的输入一旦启动。 我一直在考虑如何解决这个问题。如何允许脚本/时钟保持运行,并且仍然接受来自操纵杆的新操作。但是一旦while循环开始,我就卡住了。我不知道该用谷歌搜索什么。我已经开始研究async/await,

  • 问题内容: 有没有一种方法可以执行不冻结浏览器的同步AJAX查询?在我看来,在大多数情况下,同步请求要容易得多,但是它们阻止了代码其他部分的执行,这是一个真正的杀手。有没有办法获得同步AJAX而没有负面影响?(是的,我意识到术语“同步AJAX”是矛盾的。) 问题答案: 在即将到来的ECMAScript 2016(ES7)标准中,提供了一组新的语言关键字,这些关键字旨在执行与您似乎正在寻找的目标非常

  • 本文向大家介绍请你说一下阻塞,非阻塞,同步,异步相关面试题,主要包含被问及请你说一下阻塞,非阻塞,同步,异步时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 阻塞和非阻塞:调用者在事件没有发生的时候,一直在等待事件发生,不能去处理别的任务这是阻塞。调用者在事件没有发生的时候,可以去处理别的任务这是非阻塞。 同步和异步:调用者必须循环自去查看事件有没有发生,这种情况是同步。调用者不用自己去查看

  • 问题内容: 我正在为密集型网络应用程序实现无锁的单一生产者单一使用者队列。我有一堆工作线程在各自独立的队列中接收工作,然后它们将出队并进行处理。 从这些队列中删除锁可以极大地提高高负载下的性能, 但是当队列为空时它们不再阻塞 ,从而导致CPU使用率猛增。 我如何有效地使线程阻塞,直到它可以成功出队或被杀死/中断? 问题答案: 如果您使用的是Linux,请考虑使用Futex。它通过使用原子操作而不是