我想用 Java 实现一个线程池,它可以根据提交给它的任务的计算和 I/O 行为动态调整自身大小。
实际上,我想实现与C# 4.0 中的新线程池实现相同的行为
是否已经有实现,或者我可以通过使用大多数现有的并发实用程序(例如 CachedThreadPool)来实现此行为?
C# 版本进行自我检测以实现最佳利用率。Java 中有哪些可用的自我检测工具,目前对性能有何影响?
执行协作方法是否可行,其中任务表明其意图(例如进入 I/O 密集型操作,进入 CPU 密集型操作阶段)?
欢迎任何建议。
编辑基于评论:
目标场景可能是:
- 本地文件抓取与处理
- 网络爬取
- 多Web服务访问和聚合
CachedThreadPool 的问题在于,当所有现有线程都被阻塞时,它会启动新线程——您需要在其上设置显式边界,仅此而已。
例如,我有 100 个 Web 服务要连续访问。如果我创建一个 100 CTP,它将启动 100 个线程来执行操作,并且大量的多个 I/O 请求和数据传输肯定会互相绊倒。对于静态测试用例,我将能够进行试验并找出最佳池大小,但我希望它能够自适应地确定并以某种方式应用。