Tag: multicore

OpenJDK JVM不会在多个核心上调度线程

当我在随Ubuntu 12.04一起分发的OpenJDK 6 JVM上运行我的multithreadingJava程序时,所有线程都安排在一个内核上。 但是当我从Oracle最新的1.7 JDK在JVM上运行完全相同的程序时,它很好地围绕所有24个可用内核旋转了我的20个线程。 OpenJDK文档解释了Java线程将被分配给本机线程,但它似乎不起作用。 我的OpenJDK安装中是否存在配置错误,或者它是否真的不支持多核硬件? OpenJDK的: java version “1.6.0_27” OpenJDK Runtime Environment (IcedTea6 1.12.6) (6b27-1.12.6-1ubuntu0.12.04.2) OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode) Oracle JDK: java version “1.7.0_40” Java(TM) SE Runtime Environment (build 1.7.0_40-b43) Java HotSpot(TM) 64-Bit Server VM (build 24.0-b56, mixed mode)

针对F#的情况如何?

简单的C#/ Java代码非常难以并行化,multithreading等。因此,简单的C#/ Java代码将在一个盒子上使用越来越少的总处理能力(因为现在所有东西都将是多核的) )。 在C#和Java中解决这个问题并不简单。 可变性和副作用是在C#和Java中完成工作的关键,但这正是使多核,multithreading编程变得如此困难的原因。 因此,函数式编程将变得越来越重要。 鉴于J2EE / Ruby世界将在许多function/多核方法中分裂(就像它对其他所有方法一样),而.NET人员都将使用F#,这种思路表明F#将在两个方面很大年份。 这种思路有什么问题? 为什么F#不会很大? (编辑)Larry O’Brien在这篇博客文章中指出:“语言方面,在我看来,这是一套C和C ++闪耀的练习 – 至少在multithreading的东西之前。列表处理习语的语言也会最初做得很好,但可能有内存消耗问题(特别是函数式语言)。最后,我认为托管C派生语言(Java和C#)具有最简单的练习9路径,然后在练习10中面临严重缺陷,其中并发问题起主要作用。在我看来,并发性将成为未来五年专业发展的核心问题,因此这些缺点非常重要。

有没有办法提高Java编译器的多核/多处理器性能?

我的同事注意到,当javac正在编译时,它只使用一个核心。 是否有类似-j命令与Java的gcc,这将允许我们跨核心或处理器分配编译器工作负载? 如果没有,您是否认为这将是可能的,或者由于Java的设计是否存在某种基本限制? 环境是使用Sun J2SE 1.6.0.11 jdk的Linux。

为什么这个Java代码不使用所有CPU内核?

附加的简单Java代码应该在使用正确的参数启动时加载所有可用的cpu内核。 例如,你开始使用它 java VMTest 8 int 0 它将启动8个线程,除了循环并将2添加到整数之外什么都不做。 在寄存器中运行的东西,甚至不分配新的内存。 我们现在面临的问题是,当运行这个简单的程序(当然有24个线程)时,我们没有加载24核机器(AMD 2个插槽,每个12个核心)。 类似的事情发生在每12个线程或更小的机器的2个程序。 所以我们怀疑JVM(Linux x64上的Sun JDK 6u20)不能很好地扩展。 有没有人看到类似的东西或有能力运行它并报告它是否在他/她的机器上运行良好(> =仅8个核心)? 想法? 我在带有8个内核的Amazon EC2上尝试过,但虚拟机似乎与真正的盒子不同,因此加载的行为非常奇怪。 package com.test; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; public class VMTest { public class IntTask implements Runnable { @Override public void run() { int i = 0; while (true) { i = […]