java - Java 应用程序中应该存在多少个线程?
问题描述
据我所知,有一个规则:
N_threads = N_cores / (1 - blocking_factor)
因此,一方面,如果我有一个 CPU 密集型任务,我应该只有N_cores
线程,另一方面,如果我有一个 IO 密集型任务,我可以拥有阻塞因素允许的尽可能多的线程。
问题:
例如,如果我为 CPU 密集型任务创建两个池,每个池中都有“N_cores”线程,那么它会违反这个规则吗?这条规则适用于特定的线程池(我可以拥有我认为合适的线程)还是 JVM 公用池(我应该将此规则应用于属于我的整个 Java 进程的线程)?
解决方案
因此,该公式非常适用于 CPU 密集型任务,因此如果根本没有阻塞,您可以通过内核数轻松计算池大小。如果处理涉及您拥有的任务的不同阻塞时间,您可能需要更大的灵活性来确保您的应用程序的响应能力。ForkJoinPool.ManagedBlocker 可用于临时需要额外线程以确保足够并行性的情况。
查看本课程以了解其使用方法:https ://www.youtube.com/watch?v=5M55Ab6LG7A
推荐阅读
- php - 无法访问其他表数据 SQL
- c# - 为什么 C# 列表是使用数组而不是链表实现的
- android - 使用 SimpleDateFormat 和 UmmalquraCalendar 以阿拉伯语显示日期名称时获取空字符串
- java - 如何忽略在java中将重复的电话号码添加到mysql表中
- c# - 无法使用 Direct2D 在其他位图之上绘制位图
- php - 将 Deployer deploy.php 配方添加到 .gitignore?
- c# - 存储过程
- excel - 相交时单元格上方的VBA excel复制
- javascript - 崇高文本3中的打字稿构建系统不起作用
- python - Tensorflow:注意力输出与下一个解码器输入连接,导致 seq2seq 模型中的维度不匹配