相关疑难解决方法(0)

每个处理器的线程数

在Java中,是否有一种编程方式可以找出CPU支持多少并发线程?

更新

为了澄清,我不是试图用线程来锤击CPU,而是我知道Runtime.getRuntime().availableProcessors()函数,它提供了我正在寻找的部分信息.

我想知道是否有办法自动调整线程池的大小,以便:

  • 如果我在1岁的服务器上运行,我会得到2个线程(每个CPU 1个线程x 2个任意乘数)
  • 如果我从现在开始两年后切换到Intel i7四核(每个核心支持2个线程),我会得到16个线程(每个CPU 2个逻辑线程x 4个CPU x 2个任意乘数).
  • 相反,如果我使用八核Ultrasparc T2服务器(每个核心支持8个线程),我得到128个线程(每个CPU 8个线程x 8个CPU x 2个任意乘数)
  • 如果我在可能在不同年份购买的30台不同机器的集群上部署相同的软件,我不需要读取CPU规格并为每一台机器设置配置选项.

java concurrency

25
推荐指数
3
解决办法
3万
查看次数

多线程快速排序或合并排序

如何为Java实现并发快速排序或合并排序算法?

我们在16-(虚拟) - 核心Mac上遇到了问题,其中只有一个核心(!)使用默认的Java排序算法工作,并且很好地看到非常好的机器完全未被充分利用.所以我们写了自己的(我写的),我们确实获得了很好的加速(我编写了一个多线程的快速排序,由于它的分区性质,它很好地并行化,但我也可以编写一个mergesort)...但是我的实现只能扩展最多4个线程,它是专有代码,我宁愿使用来自信誉良好的源代码而不是使用我重新发明的轮子.

我在Web上找到的唯一一个例子是如何不用 Java编写多线程快速排序,它使用的是繁忙循环(这非常糟糕):

while (helpRequested) { }
Run Code Online (Sandbox Code Playgroud)

http://broadcast.oreilly.com/2009/06/may-column-multithreaded-algor.html

因此,除了无缘无故地丢失一个线程之外,它确保通过在while循环中忙碌循环来杀死perf(这是令人难以置信的).

因此我的问题是:您是否知道Java中正确的多线程快速排序或mergesort实现将来自信誉良好的来源?

我强调的事实是,我知道复杂性保持为O(n log n),但我仍然非常喜欢看到所有这些核心开始工作而不是空闲.请注意,对于其他任务,在相同的16个虚拟核心Mac上,我通过并行化代码看到了高达x7的加速(我并不意味着并发专家).

所以即使很难复杂性保持O(n log n),我也非常欣赏x7或x8甚至x16加速.

java sorting mergesort multithreading quicksort

25
推荐指数
3
解决办法
3万
查看次数

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

我只是想知道如果必须使用多核处理器,我们是否真的需要算法是多线程的,或者jvm是否会使用多核甚至 - 虽然我们的算法是顺序的?

更新:

相关问题:

java multithreading multicore

9
推荐指数
2
解决办法
8131
查看次数

Java VM - Eclipse使用我的核心?

我有关于JVM运行我的Java代码的问题.我的朋友有一个2.4或2.5GHz双核,而我有一个2GHz四核.现在我的问题是:Java是使用所有内核还是只使用一个内核?我的朋友认为Java使用1核心,因此他的运行时间会更长,因为他的核心时钟频率比我的高.

java eclipse processor

5
推荐指数
1
解决办法
5411
查看次数