Tag: 超线程

在Java中启用Intel超线程

我有一个在四核Intel i7上运行的multithreading程序。 当我执行Runtime.getRuntime.availableProcessors() ,我得到8,我知道在这个CPU上可以使用超线程。 但是,当我创建线程时,我的CPU级别为4个线程的100%(即非零),这意味着4个线程未被使用。 有没有办法在Java中启用超线程?

如果CPU是超线程,是否可以检查Java?

我想知道我可以运行的最佳线程数。 通常,这等于Runtime.getRuntime().availableProcessors() 。 但是,在支持超线程的CPU上,返回的数字是两倍。 现在,对于某些任务,超线程是好的,但对于其他任务,它什么都不做。 在我的情况下,我怀疑,它什么都不做,所以我想知道我是否必须将Runtime.getRuntime().availableProcessors()返回的数字除以二。 为此,我必须推断CPU是否是超线程。 因此我的问题 – 我怎么能用Java做到这一点? 谢谢。 编辑 好的,我已对我的代码进行了基准测试。 这是我的环境: 联想ThinkPad W510(即带有4核和超线程的i7 CPU),16G内存 Windows 7的 84个压缩CSV文件,压缩大小从105M到16M不等 所有文件都在主线程中逐个读取 – 没有multithreading访问HD。 每个CSV文件行包含一些数据,这些数据被解析,快速无上下文测试确定该行是否相关。 每个相关的行包含两个双精度表示(好奇的经度和纬度),它们被强制转换为单个Long ,然后存储在共享散列集中。 因此,工作线程不会从HD中读取任何内容,但它们会通过解压缩和解析内容(使用opencsv库)来占用自己。 以下是代码,没有枯燥的细节: public void work(File dir) throws IOException, InterruptedException { Set allCoordinates = Collections.newSetFromMap(new ConcurrentHashMap()); int n = 6; // NO WAITING QUEUE ! ThreadPoolExecutor exec = new ThreadPoolExecutor(n, […]