Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在大量使用线程的情况下分析多线程程序节流_Java_Multithreading_Parallel Processing - Fatal编程技术网

Java 如何在大量使用线程的情况下分析多线程程序节流

Java 如何在大量使用线程的情况下分析多线程程序节流,java,multithreading,parallel-processing,Java,Multithreading,Parallel Processing,我正在写一个简单的程序,它根据。在我详细说明这个问题之前,让我说我正在一个12核的CPU上测试我的程序(用Java8编写),这个CPU有24个线程。根据htop,运行测试时,服务器上没有负载,因此这是不可能的 然而,我预计当它在大量线程时开始阻塞时(比如说在>8时,当它离开y=x行时),会有近似线性的加速。在这一点上,程序对相同参数和不同线程数执行的时间是恒定的,并且速度最高为10 如果没有太多的具体信息,我想知道如何分析我的程序阻塞的地方。换句话说,在检查并行程序的加速比时,有些人必须做些什么

我正在写一个简单的程序,它根据。在我详细说明这个问题之前,让我说我正在一个12核的CPU上测试我的程序(用Java8编写),这个CPU有24个线程。根据
htop
,运行测试时,服务器上没有负载,因此这是不可能的

然而,我预计当它在大量线程时开始阻塞时(比如说在>8时,当它离开
y=x
行时),会有近似线性的加速。在这一点上,程序对相同参数和不同线程数执行的时间是恒定的,并且速度最高为10


如果没有太多的具体信息,我想知道如何分析我的程序阻塞的地方。换句话说,在检查并行程序的加速比时,有些人必须做些什么。

如果不看一下您的代码,尤其是累积结果的方式,就不可能说什么。这可能是因为缩减阶段涉及到一些昂贵的锁定形式,随着线程数量的增加,线程被阻塞的频率越来越高/阻塞的时间越来越长。第一个提示可能是查看是否有很多线程被阻塞在几个snpashot中(您可以从jdk获得jvisualvm)。您需要查看正在共享哪些资源。您是否经常使用三级缓存,或者您的所有数据/代码是否都适合256 KB二级缓存?顺便说一句,这并不是大部分的工作序列,你可以使用多个CPU从头开始计算,但是在前一个值的基础上构建每个值会更有效。如果不看一下你的代码,特别是你积累结果的方式,这是不可能的。这可能是因为缩减阶段涉及到一些昂贵的锁定形式,随着线程数量的增加,线程被阻塞的频率越来越高/阻塞的时间越来越长。第一个提示可能是查看是否有很多线程被阻塞在几个snpashot中(您可以从jdk获得jvisualvm)。您需要查看正在共享哪些资源。您是否经常使用三级缓存,或者您的所有数据/代码是否都适合256 KB二级缓存?顺便说一句,并不是大多数的工作序列,您可以使用多个CPU从头开始计算这个值,但是基于上一个值构建每个值会更加高效。