相关疑难解决方法(0)

276
推荐指数
9
解决办法
16万
查看次数

处理器核心数与线程池大小的比较

很多时候我听说最好将线程池中的线程数保持在该系统中的核心数之下.拥有两个或更多线程而不是内核数量不仅是浪费,而且还可能导致性能下降.

那些是真的吗?如果没有,那些揭穿这些主张(特别是与java有关)的基本原则是什么?

java multithreading

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

用于同时检查多个数字的素数的JAVA多线程比单线程慢

(我无法在任何地方找到答案,很抱歉,如果这是一个已被问过的问题.)

我需要检查我的用户指定的每个数字是否为素数.因此,我强行检查每个数字是否达到该值(我在技术上希望与用户希望的一样大)是否是通过检查是否为素数的素数

p%i==0
Run Code Online (Sandbox Code Playgroud)

如果p是每个奇数3的用户输入值,则为true

显然,一旦程序开始检查非常大的数字,循环通过每个单个奇数到输入值的一半就需要一段时间.由于这个限制,我的当前状态的程序在大数字上减慢了"每秒检查数"的速度,这意味着该程序可能需要很长时间才能完成非常大的数字.

为了解决这个问题,我试图为主要检查方面实现多线程,如下所示:

int CPUs = Runtime.getRuntime().availableProcessors();
int acCPU = 0;
//...
Thread pCheckThread[] = new Thread[CPUs-1];
class pCheckRunnable implements Runnable{
    long pr;
    int xp, yp;
    pCheckRunnable(long prime){
        pr=prime;
    }
    public void run(){
        if(isPrime(pr))
            //Do stuff...
    }
}
//...
for(long i=1; i<valueEntered; i++){
    pCheckThread[acCPU] = new Thread(new pCheckRunnable(i));
    pCheckThread[acCPU].start();
    acCPU++;
    if(acCPU>=CPUs){
    for(int t=0; t<pCheckThread.length; t++){
        try {
        pCheckThread[t].join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    acCPU = 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

正如您可能希望看到的那样,我们的想法是检查多个数字是否同时处于素数,每个检查在一个单独的线程中运行,最大线程数等于可用的处理器核心数.

问题是,该程序现在似乎实际上运行速度较慢.

这是我第一次尝试多线程和并行处理,我可能只是犯了一些非常愚蠢的错误,或者我的代码可能会让你们中的一些经验丰富的编码员的意见变得非常混乱,所以请随时告诉我我做过任何可能导致不稳定或腐败的严重错误.

java optimization performance multithreading runnable

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

什么是固定线程池的理想大小?

固定线程池已用于通过将整数变量传递给如下所示的executors方法来限制java应用程序中的线程数

Executors.newFixedThreadPool(10);
Run Code Online (Sandbox Code Playgroud)

假设我们正在设计任何应用程序,并且我们正在使用固定线程池,那么我们如何才能决定理想的固定线程池大小或者我们应该根据什么来决定固定的线程池大小?

java concurrency multithreading threadpool

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