Java 处理线程池隔离?

Java 处理线程池隔离?,java,multithreading,threadpool,hazelcast,threadpoolexecutor,Java,Multithreading,Threadpool,Hazelcast,Threadpoolexecutor,目标 我想了解如何在java中同时处理两个线程池 考虑一个客户机-服务器系统,其中客户机向服务器(例如文件服务器)发送阻塞I/O请求。服务器上运行一个ThreadPoolExecutor实例。某些类型的客户端请求比其他请求需要更长的处理时间。这些请求称为高I/O强度请求。这些高I/O强度的请求占用了所有线程,导致整个应用程序崩溃 我想通过两个独立的线程池执行器来解决这个问题。 我创建了两个ThreadPoolExecutor实例,一个用于高I/o强度请求,另一个用于低I/o强度请求,通过脱机

目标

我想了解如何在java中同时处理两个线程池


考虑一个客户机-服务器系统,其中客户机向服务器(例如文件服务器)发送阻塞I/O请求。服务器上运行一个ThreadPoolExecutor实例。某些类型的客户端请求比其他请求需要更长的处理时间。这些请求称为高I/O强度请求。这些高I/O强度的请求占用了所有线程,导致整个应用程序崩溃


我想通过两个独立的线程池执行器来解决这个问题。 我创建了两个ThreadPoolExecutor实例,一个用于高I/o强度请求,另一个用于低I/o强度请求,通过脱机工作负载过程,我创建了一个查找表来对请求进行分类,当请求到达时,我首先在查找表中搜索它的类,以便我可以将它移交给相应的线程池


真正的问题。 如何将处理器平等地共享给这两个线程池。这个任务是由JVM本身处理还是我必须自己在应用程序级别处理? 我应该使用集群并使用另一台运行ThreadPoolExecutor实例的机器来处理高I/O强度的请求吗?
请给我适当的设计建议。

通常取决于系统CPU调度程序如何在线程之间分配时间。线程池与线程调度无关。它可以管理一些线程的重用或它们之间的同步

创建2个池而不是1个池的唯一优点是,一个池可以使用不同于标准池的ThreadFactory。您可以为要求苛刻的客户提供不同的优先级。优先权是一种信息,但如果你让它们变得不那么重要,它们会遭受更大的损失,反之亦然;)

也许你更愿意做一些事情,比如当有人使用太多资源时,调整它的优先级


是Microsoft如何使用优先级来调整线程CPU消耗的一些参考。

否JVM无法为您路由ThreadPoolExecutor。您可以实现一个外部观察线程来监视您的线程,并对其应用适当的策略(优先级、异常处理等)

看看这个例子:


您无法决定将多少资源处理给线程,这是内核的决定,而不是您的决定(幸运的是)。但是你可以优先考虑线程。你看过卡布兹教授的吗?它看起来可以满足你的需要,或者至少是它的一个变体。