输出来自WMIC
:
C:\Users\fra>WMIC CPU Get DeviceID,NumberOfCores,NumberOfLogicalProcessors
DeviceID NumberOfCores NumberOfLogicalProcessors
CPU0 4 8
C:\Users\fra>
它告诉我我有 4 个核心和 8 个处理器。就开发 Java 应用程序而言,有多少个并发线程有效执行?如果我启动 32 个长时间运行的任务线程,它们都会并发执行吗?
处理器是:
Intel i7-4800MQ CPU @2.70GHz
答案1
简短的回答是:也许吧。
每个核心一次不能做多于一件事的工作,每个时钟周期也不能做多于一件事的工作。但是,操作系统可以为每个核心安排多个进程的工作,每个单位大于一个时钟周期。这是看待超线程的简单方法。
如果应用程序的等待时间较长,那么 32 个线程可以轻松加载到内存中并同时运行,对性能几乎没有影响,我认为这才是真正的问题所在。如果创建了 32 个计算密集型线程,较长的工作周期与较短的等待周期将使同时工作的假象消失。
真的,如果您的目标是 32 个线程,那么希望您有理由选择这个数字,并且它在以后的道路上是动态的。一个处理器可能可以很好地处理 32 个线程,另一个处理器可能会卡住,并且在 5-10 年后,32 个线程可能少于每个物理核心一个线程。无论如何,最好使用 4、8、16 和 32 个线程测试应用程序,看看哪个线程在您的应用程序上完成工作最快,以查看工作负载是否可以很好地扩展到 32 个线程的目标。