Rya*_*yan 5 java multithreading hyperthreading
我有一个在四核Intel i7上运行的多线程程序.当我执行时Runtime.getRuntime.availableProcessors(),我得到8,我知道在这个CPU上可以使用超线程.
但是,当我创建线程时,我的CPU级别为4个线程的100%(即非零),这意味着4个线程未被使用.有没有办法在Java中启用超线程?
所有现代JVM都使用本机线程,因此实现了超线程,因此这是一个OS/CPU配置设置.
但是,超线程不会为您提供额外的内核,它允许您拥有的四个cpu的细粒度分时.也就是说,当一个线程停滞时,比如等待一页内存飞入缓存,然后另一个线程可以俯冲并利用CPU的一部分.由于更复杂的调度要求,它增加了大约10%的CPU核心大小,并没有使所有应用程序受益.
如果你用四个线程最大化了四个cpus,那么打开或关闭超线程就可以了.它只是意味着那些线程运行热,没有阻塞太多.
Java报告8核CPU而不是4核的原因是因为操作系统告诉Java CPU有8个核心.操作系统认为,由于操作系统已被告知调度线程就好像它是一个8核CPU,这使得对操作系统的超线程的支持更加简单.操作系统像以前一样继续管理线程,忘记了超线程的大部分内部工作,并且当CPU的部分可用时,让CPU管理程序集的低级调度.
可以在此处阅读带有基准的更详细的讨论
| 归档时间: |
|
| 查看次数: |
5833 次 |
| 最近记录: |