gpt4 book ai didi

java - AsyncFutureCompletionExecutor与Netty事件循环

转载 作者:行者123 更新时间:2023-12-03 13:23:28 26 4
gpt4 key购买 nike

我使用的是适用于Java 2.0的AWS开发工具包以及Netty HTTP客户端,我注意到有两个可以有效处理响应的不同线程池。第一个是ThreadPoolExecutor,可以将其作为服务客户端本身的一部分覆盖,如下所示

DynamoDbAsyncClient dynamoClient = DynamoDbAsyncClient.builder()
.httpClient(httpClient)
.asyncConfiguration(ClientAsyncConfiguration.builder()
.advancedOption(SdkAdvancedAsyncClientOption.FUTURE_COMPLETION_EXECUTOR, awsSdkFutureCompletionExecutor)
.build())

第二个是Netty HTTP客户端的事件循环。根据我加入线程的位置,可以看到它是由 aws-java-sdk-NettyEventLoop还是 sdk-async-response线程池处理的。

如果我调用 dynamoClient.query(request).join(),我可以看到 aws-java-sdk-NettyEventLoop继续进行任何进一步的处理,而 dynamoClient.query(request).whenComplete(...)意味着 sdk-async-response线程正在执行该处理。

有没有推荐的方法?我是否应该在一个线程池中比在另一个线程池中进行处理?

最佳答案

我怀疑我实际上知道这个答案。我相信响应将被移交给sdk-async-response线程池,以防止有人在响应处理程序中为请求执行阻塞调用,从而阻塞Netty事件循环。因此,为了回答我自己的问题,我认为响应处理应该在sdk-async-response线程池中进行。在将来的版本中,如果没有通常的警告,就不能在Netty事件循环之外移交响应,那可能会很好,但是目前看来这是不可能的。

关于java - AsyncFutureCompletionExecutor与Netty事件循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62472073/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com