Tag: 多核

适用于Java的数据流编程API?

我正在寻找一个Java的数据流/并发编程API。 我知道有DataRush ,但它不是免费的。 我特别感兴趣的是多核数据处理,而不是分布式的,它排除了MapReduce或Hadoop 。 有什么想法吗? 谢谢,罗洛

在Erlang比单线程Java更快之前需要多少CPU

我目前正在使用Java,我在网上读了很多关于Erlang的内容,我有两大问题: Erlang会比简单的Java慢多少(如果有的话)? 我在这里假设Java将从网络上的枪战基准更快(Erlang不那么好)。 那么,我需要多少CPU才能使Erlang超越单线程Java(在我的特殊情况下,如下所示)? 在阅读了Erlang一段时间后,我发表了大量评论/post,说大多数大型Erlang系统都包含大量的C / C ++。 这是出于速度原因(我的假设)还是别的什么? 即为什么需要这个? 我已经读过大多数机器上升的处理器数量和线程模型很难(我同意)但是我想找出什么时候会越过“线”以便我可以在右边更改语言/范例时间。 一点背景/背景: 我在Java服务的服务器端工作,这些服务非常受CPU限制,很容易并行。 这通常是由于单个传入更新(通过TCP)触发对多个(100个)输出的更改。 计算通常非常简单(几个循环,只需很多算术),输入速度非常快(100 / s)。 目前我们在4台CPU机器上运行并在每台机器上运行多个服务(因此multithreading非常没有意义,Java似乎运行得更快,没有同步块等,使其成为multithreading)。 现在有一个强大的速度推动,我们现在可以访问24台处理器机器(如果需要,每个进程),所以我想知道如何最好地继续 – 大规模multithreadingJava或更容易编码的东西,如Erlang。

Java 8自动使用多核?

我在一年前做了一些关于java 7多核的测试。首先,我只在主线程中实现了一些计算(CPU使用率表明只有一个核完成了所有工作)然后我用ExecutorService实例实现了Callable。 在运行它时,所有核心都在进行工作。 现在,一年后,我必须实现一个插入大量数据的小程序(使用java 8)。 所有工作都在主线程中实现(没有Callable和ExecutorService),但是当我运行程序时,CPU使用情况显示,所有4个内核都是98%。 那么java 8会自动在所有CPU内核上分配工作吗? 我很困惑… 这里有一些代码…… MapGenerator.java Region[][] regions = new Region[numOfRegions][numOfRegions]; for(int x = 0; x < regions.length; x++){ for(int z = 0; z < regions[x].length; z++){ newLat = SRTMHandler.getNewLatitude(startLat, z * regionSize * 16); newLon = SRTMHandler.getNewLongitude(startLon, x * regionSize * 16, newLat); regions[x][z] = new Region(x, z, regionSize, […]

是否需要使用multithreading算法来使用多核处理器?

我只是想知道如果必须使用多核处理器我们是否真的需要算法是multithreading的,或者jvm是否会使用多核甚至 – 尽管我们的算法是顺序的? 更新: 相关问题: 在Java中使用multithreading快速或合并排序

如何确保Java线程在不同的核心上运行

我正在用Java编写一个multithreading应用程序,以提高顺序版本的性能。 它是0/1背包问题的动态编程解决方案的并行版本。 我有一个Intel Core 2 Duo,在不同的分区上同时使用Ubuntu和Windows 7 Professional。 我在Ubuntu中运行。 我的问题是并行版本实际上需要比顺序版本更长的时间。 我想这可能是因为线程都被映射到同一个内核线程或者它们被分配到同一个内核。 有没有办法确保每个Java线程映射到一个单独的核心? 我已经阅读了有关此问题的其他post,但似乎没有任何帮助。 这是KnapsackThread类(扩展Thread)的main()和run()的结束。 请注意,我使用slice和extra来计算myLowBound,myHiBound确保每个线程不会在dynProgMatrix的域中重叠。 因此没有竞争条件。 dynProgMatrix = new int[totalItems+1][capacity+1]; for (int w = 0; w<= capacity; w++) dynProgMatrix[0][w] = 0; for(int i=0; i<=totalItems; i++) dynProgMatrix[i][0] = 0; slice = Math.max(1, (int) Math.floor((double)(dynProgMatrix[0].length)/threads.length)); extra = (dynProgMatrix[0].length) % threads.length; barrier = new CyclicBarrier(threads.length); for (int i […]

为什么单个线程进程在多个处理器/内核上执行?

假设我运行一个简单的单线程进程,如下所示: public class SirCountALot { public static void main(String[] args) { int count = 0; while (true) { count++; } } } (这是Java,因为这是我所熟悉的,但我怀疑它并不重要) 我有一个i7处理器(4核,或8计数超线程),我正在运行Windows 7 64位,因此我启动了Sysinternals Process Explorer来查看CPU使用情况,正如预期的那样,我发现它使用了大约20%所有可用的CPU。 但是,当我切换每个CPU显示1个图形的选项时,我发现使用的是4个“核心”中的1个,CPU占用率遍布整个核心: 相反,我期望的是1核最大化,但这只发生在我将流程的亲和力设置为单核时。 为什么工作负载分散在不同的核心上? 不会将工作负载分散到多个核心,因为缓存还是会导致其他性能损失? 这是为了防止一个核心过热的简单原因吗? 还是有更深层次的原因? 编辑:我知道操作系统负责调度,但我想知道为什么它“烦恼”。 当然,从一个天真的角度来看,将(主要是*)单线程进程坚持到1核心是更简单,更有效的方法吗? *我说主要是单线程,因为这里有多个theads,但只有2个在做任何事情: