【发布时间】:2015-03-23 15:07:47
【问题描述】:
目标
想了解java中如何同时处理两个线程池?
考虑一个客户端服务器系统,其中客户端向服务器(例如文件服务器)发送阻塞 I/O 请求。服务器上运行着一个 ThreadPoolExecutor 实例。某些类型的客户端请求比其他请求需要更长的时间来处理。这些请求称为高 I/O 强度请求。这些高 I/O 强度的请求会占用所有线程并关闭整个应用程序。
我想通过两个独立的 ThreadPoolExecutor 来解决这个问题。 我创建了两个 ThreadPoolExecutor 实例,一个用于高 I/O 强度请求,另一个用于低 I/O 强度请求,并通过离线工作负载过程创建一个查找表来对请求进行分类,当请求到达时,我首先在查找中搜索其类表,以便我可以将其移交给其对应的线程池。
真正的问题。 如何将处理器平均分配给这两个线程池。这个任务是由 JVM 自己处理还是我必须在应用程序级别自己处理? 我应该使用集群并使用另一台运行 ThreadPoolExecutor 实例的机器来处理高 I/O 强度请求吗? 请给我适当的设计建议。
【问题讨论】:
-
你无法决定有多少资源被处理给线程,这是内核的决定,而不是你的(幸运的是)。但是你可以给线程优先级。
-
你看过 Kabutz 教授的 Striped Executor - 看起来它可以满足你的需求 - 或者至少是它的一个变体。
标签: java multithreading threadpool hazelcast threadpoolexecutor