gpt4 book ai didi

java - 如何检查Java程序中的线程是顺序运行还是并行运行?

转载 作者:行者123 更新时间:2023-12-01 14:52:11 26 4
gpt4 key购买 nike

我有一个java程序,可以将一些文件提取到客户端计算机上。我已经实现了 4 个线程来提取文件。但线程实现几乎不影响提取时间。我已经检查了 jvisualvm 中的线程执行情况,它看起来很好,并且我确信线程是并行实现的。这是我的系统配置...

Windows XP、Core2duo、3GB RAM。java-vm-args:-Xmx512M -Xss2M。我已将可用处理器打印到正在运行的 JVM...Runtime.getRuntime().availableProcessors() = 1(如果我没记错的话,它应该执行2个逻辑线程)。

我错过了什么吗?我们如何确保线程在硬件级别并行运行?

最佳答案

How can we assure that threads are running parallel at Hardware level?

我认为这基本上是一个无效的问题。在 Linux 下,您可以使用 ps -eLfl 查看线程及其状态,但这在其他操作系统上不起作用。线程转储将显示线程状态。通过 jconsole 中的“线程”选项卡并单击线程也将显示其状态。

But thread implementation barely effecting the extraction time

正如其他人所提到的,这是一个教科书标志,表明您的程序是 IO 绑定(bind)的。所有线程都在争夺相同的 IO 资源,并且大部分时间都花在等待队列中。

要测试这个理论,请将您的应用程序移至更快的磁盘系统。 SSD 就是这里的炸弹。首先将文件加载到内存中,然后使用不同数量的线程运行处理也将隔离 IO 带宽问题。使用内存文件系统也可以。

如果您的进程受 IO 限制,那么可能没有任何方法可以在不增加 IO 带宽的情况下加速它。

关于java - 如何检查Java程序中的线程是顺序运行还是并行运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14730163/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com