首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AsyncHttpClient创建了多少线程?

AsyncHttpClient创建了多少线程?
EN

Stack Overflow用户
提问于 2019-05-28 13:37:03
回答 1查看 1.8K关注 0票数 1

我在代码中使用异步http客户端异步处理GET响应,我可以同时运行100个请求。

我只在容器中的httpClient实例上使用

代码语言:javascript
复制
@Bean(destroyMethod = "close")
open fun httpClient() = Dsl.asyncHttpClient()

代码看起来像

代码语言:javascript
复制
fun method(): CompletableFuture<String> {
    return httpClient.prepareGet("someUrl").execute()
        .toCompletableFuture()
        .thenApply(::getResponseBody)
}

它的功能很好。在我的测试中,我使用相同url地址的模拟端点。但是我的期望是,所有的请求都是在几个线程中处理的,但是在分析器中,我可以看到为AsyncHttpClient创建了16个线程,即使没有发送请求,它们也不会被销毁。

我的期望是

  • 它将减少异步客户端的线程。
  • 线程将在某些配置的超时之后被销毁。
  • 是否有一些选项可以控制asyncHttpClient可以创建多少线程?

我是不是在我的期望中遗漏了什么?

更新1我在https://github.com/AsyncHttpClient/async-http-client/wiki/Connection-pooling上看到了指令我没有找到线程池的信息

UPDATE 2我也创建了方法来做同样的事情,但是使用了处理程序和附加的执行器池。

实用程序方法看起来像

代码语言:javascript
复制
fun <Value, Result> CompletableFuture<Value>.handleResultAsync(executor: Executor, initResultHandler: ResultHandler<Value, Result>.() -> Unit): CompletableFuture<Result> {
    val rh = ResultHandler<Value, Result>()
    rh.initResultHandler()

    val handler = BiFunction { value: Value?, exception: Throwable? ->
        if (exception == null) rh.success?.invoke(value) else rh.fail?.invoke(exception)
    }

    return handleAsync(handler, executor)
}

更新的方法如下所示

代码语言:javascript
复制
fun method(): CompletableFuture<String> {
    return httpClient.prepareGet("someUrl").execute()
        .toCompletableFuture()
        .handleResultAsync(executor) {
            success = {response ->
                logger.info("ok")
                getResponseBody(response!!)
            }
            fail = { ex ->
                logger.error("Failed to execute request", ex)
                throw ex
            }
    }
}

然后我可以看到GET方法的结果是在线程池提供的线程中执行的(以前的结果是在“AsyncHttpClient-3-x”中执行的),但是AsyncHttpClient的附加线程仍然被创建而没有被破坏。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-08 20:33:53

AHC有两种类型的线程:

  1. 用于I/O操作。在您的屏幕上,它是AsyncHttpClient线程。AHC创建了2*core_number
  2. 暂停一下。在您的屏幕上,它是AsyncHttpClient-timer-1-1线程。只应该是one

资料来源:GitHub杂志:https://github.com/AsyncHttpClient/async-http-client/issues/1658

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56343520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档