Jam*_*s B 3 java concurrency multithreading multicore
我有一个程序启动并创建一个内存数据模型,然后创建一个(命令行指定的)线程数,以针对输入集和该数据模型运行多个字符串检查算法.工作分为沿输入字符串集的线程,然后每个线程迭代相同的内存数据模型实例(永远不会再次更新,因此没有同步问题).
我在带有2个四核处理器的Windows 2003 64位服务器上运行它,并且通过查看Windows任务管理器,当我运行时,它们没有被最大限度地使用,(它们看起来也不像是特别征税) 10个主题.这是正常的行为吗?
似乎7个线程在相似的时间内完成了相似的工作量,所以你建议用7个线程运行吗?
我应该用更多的线程运行吗?...虽然我认为这可能是有害的,因为JVM将在线程之间进行更多的上下文切换.
或者,我应该用更少的线程运行它吗?
或者,什么是我可以用来衡量这个的最佳工具?...一个分析工具会帮助我 - 实际上,这是几个能够更好地检测瓶颈(假设我有一个)的分析师之一吗?
请注意,服务器也运行SQL Server 2005(这可能相关也可能不相关),但是当我运行程序时,该数据库上没有发生任何事情.
另请注意,线程仅执行字符串匹配,它们不执行任何I/O或数据库工作或其他任何可能需要等待的操作.
我的猜测是你的应用程序在内存访问方面存在瓶颈,即你的CPU内核花费大部分时间等待从主内存中读取数据.我不确定剖析器能够很好地诊断出这种问题(剖析器本身可能会大大影响行为).您可以通过让代码在非常小的数据集上重复执行多次操作来验证猜测.
如果这个猜测是正确的,那么你唯一可以做的就是(除了获得具有更多内存带宽的服务器之外)是尝试增加内存访问的位置以更好地利用缓存; 但取决于可能无法实现的应用程序的详细信息.由于核心共享高速缓存,因此使用更多线程实际上可能导致更差的性能.
| 归档时间: |
|
| 查看次数: |
1919 次 |
| 最近记录: |