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 增加执行器中的线程数。newFixedThreadPool()会减慢速度_Java_Multithreading_Executorservice_Threadpoolexecutor - Fatal编程技术网

Java 增加执行器中的线程数。newFixedThreadPool()会减慢速度

Java 增加执行器中的线程数。newFixedThreadPool()会减慢速度,java,multithreading,executorservice,threadpoolexecutor,Java,Multithreading,Executorservice,Threadpoolexecutor,如果线程数从nThread增加到nThread+1,则速度会降低一半 ExecutorService executor = Executors.newFixedThreadPool(nThread); 如果我只是将nThread设置为1,它不会使用我所有的内核。发生什么事了 我的任务不涉及读取文件或网络。它创建对象并进行计算。但是,它从向量中读取数据 多线程从同一向量读取数据会降低性能吗?如果是这样的话,我该如何修复呢?向量是一种旧的列表实现,它依赖于锁来提供线程安全性。如果多个线程同时访问该

如果线程数从nThread增加到nThread+1,则速度会降低一半

ExecutorService executor = Executors.newFixedThreadPool(nThread);
如果我只是将nThread设置为1,它不会使用我所有的内核。发生什么事了

我的任务不涉及读取文件或网络。它创建对象并进行计算。但是,它从向量中读取数据


多线程从同一向量读取数据会降低性能吗?如果是这样的话,我该如何修复呢?

向量是一种旧的列表实现,它依赖于锁来提供线程安全性。如果多个线程同时访问该向量,这些线程将遭受锁争用,这可能就是您现在遇到的情况


如果只从中读取向量,我将用ArrayList(或数组)替换它。因为没有进行锁定,并且在只读数据结构的情况下,不需要进行锁定。

如果线程的数量大于此数量,而与任务的数量无关,则上下文切换将很慢,因为线程池执行器中的线程具有相同的优先级,并且必须在它们之间共享CPU。线程的数量越多,线程等待监视器的机会就越大

即使没有同步,更多的线程数量也会严重影响性能。 在我所研究的一个应用程序中,有一个xml解析任务需要100毫秒,当线程数从10个增加到50个时,解析时间增加到5秒


配置线程池是一件学习和实现的事情。这取决于CPU中的内核数量,更多的内核将允许更多的并行处理。

为我们展示一些代码,以及一些时间。是的,对访问同步共享资源的任务进行并行化会降低速度。您是否验证过使用不同的数据结构(如ArrayList)会提高性能?