java - AsyncFutureCompletionExecutor与Netty事件循环

标签 java multithreading asynchronous aws-java-sdk-2.x

我使用的是适用于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/

相关文章:

java - 是否可以从构造函数中初始化的 .ui.xml 引用字段变量?

android - 如何最好地暂停和恢复 surfaceView 线程

c++ - 一位读者。一位作家。关于互斥量和原子内置函数的一些一般性问题

node.js - 让 Mocha 等待 index.js 完成加载后再运行测试文件

c# - 在最终等待之前从异步方法返回是否可以?

java - 使用 List.stream 将对象列表分组到另一种类型的对象列表

playframework - 为 Play 使用特定的 Java 路径!框架

java - 如何使用 MVC 在 CardLayout 中的 JPanel 之间切换?

c++ - 编译器可以从一个全局变量中读取两次,而不是存储一个本地变量吗?

javascript - 如何从 setInterval 函数返回值?