加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

为什么我的多线程Java程序没有超出我机器上的所有内核?

发布时间:2020-12-15 08:33:08 所属栏目:Java 来源:网络整理
导读:我有一个程序启动并创建一个内存数据模型,然后创建一个(命令行指定的)线程数,以针对输入集和该数据模型运行多个字符串检查算法.工作分为沿输入字符串集的线程,然后每个线程迭代相同的内存数据模型实例(永远不会再次更新,因此没有同步问题). 我在带有2个四核
我有一个程序启动并创建一个内存数据模型,然后创建一个(命令行指定的)线程数,以针对输入集和该数据模型运行多个字符串检查算法.工作分为沿输入字符串集的线程,然后每个线程迭代相同的内存数据模型实例(永远不会再次更新,因此没有同步问题).

我在带有2个四核处理器的Windows 2003 64位服务器上运行它,并且通过查看Windows任务管理器,当我运行时,它们没有被最大限度地使用,(它们看起来也不像是特别征税) 10个主题.这是正常的行为吗?

似乎7个线程在相似的时间内完成了相似的工作量,所以你建议用7个线程运行吗?

我应该用更多的线程运行吗?…虽然我认为这可能是有害的,因为JVM将在线程之间进行更多的上下文切换.

或者,我应该用更少的线程运行它吗?

或者,什么是我可以用来衡量这个的最佳工具?…一个分析工具会帮助我在这里 – 事实上,几个剖析器中的一个更好地检测瓶颈(假设我有一个),而不是其余的?

请注意,服务器也运行SQL Server 2005(这可能相关也可能不相关),但是当我运行程序时,该数据库上没有发生任何事情.

另请注意,线程仅执行字符串匹配,它们不执行任何I / O或数据库工作或其他任何可能需要等待的操作.

解决方法

没有看到实际的代码,很难给出适当的建议.但是要确保线程没有锁定共享资源,因为这自然会阻止它们尽可能高效地工作.另外,当你说他们没有做任何io时,他们是不是在阅读输入或写输出?这也可能是一个瓶颈.

关于cpu密集型线程,运行比实际内核更多的线程通常没有好处,但是在这样一个不受控制的环境中同时运行其他大型应用程序,你可能最好只是测试你的方式到最佳线程数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读