【问题标题】:Thread Pool Configuration for async task in Web ApplicationWeb 应用程序中异步任务的线程池配置
【发布时间】:2014-04-10 02:46:26
【问题描述】:

我有一个 REST API,它在后端必须调用一个异步任务。此任务将向 3rd 方 URL 发布消息。我想将此任务保留在线程池中,并且需要每秒 300 个任务的性能。我使用了一个 HttpClient 池,每条路由有 50 个连接,每个使用 HttpClient 的线程可以在一秒钟内完成 5 个任务。所以我保持> 60个线程来实现我的目标。这种方法正确吗?

【问题讨论】:

标签: java jakarta-ee threadpool


【解决方案1】:

如果你有更多的异步任务,比如日志记录、数据库条目等,那么创建一个类来完成它们,使用线程池执行器并对其进行测试。保持初始线程数和最大线程数可配置,因为结果在开发、测试和实时环境中会有所不同。还可以使用 http 客户端功能优化网络部分。

像 PoolingHttpClientConnectionManager http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/impl/conn/PoolingHttpClientConnectionManager.html

因此,您确实需要使用线程池并在其中优化网络部分。稍后,如果您执行数据库操作也可以单独优化这些操作。

TheadPoolExecutor javadoc 有一些指针http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html

这个构造函数似乎提供了大多数选项来调整和处理队列溢出时的情况

ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) 

【讨论】:

    猜你喜欢
    • 2015-07-13
    • 2015-09-14
    • 1970-01-01
    • 2018-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    • 1970-01-01
    相关资源
    最近更新 更多