有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java处理线程池隔离?

目标

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


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


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


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


共 (1) 个答案

  1. # 1 楼答案

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

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

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

    Here是微软如何使用优先级来调整线程CPU消耗的一些参考资料