Java 增加执行器中的线程数。newFixedThreadPool()会减慢速度
如果线程数从nThread增加到nThread+1,则速度会降低一半Java 增加执行器中的线程数。newFixedThreadPool()会减慢速度,java,multithreading,executorservice,threadpoolexecutor,Java,Multithreading,Executorservice,Threadpoolexecutor,如果线程数从nThread增加到nThread+1,则速度会降低一半 ExecutorService executor = Executors.newFixedThreadPool(nThread); 如果我只是将nThread设置为1,它不会使用我所有的内核。发生什么事了 我的任务不涉及读取文件或网络。它创建对象并进行计算。但是,它从向量中读取数据 多线程从同一向量读取数据会降低性能吗?如果是这样的话,我该如何修复呢?向量是一种旧的列表实现,它依赖于锁来提供线程安全性。如果多个线程同时访问该
ExecutorService executor = Executors.newFixedThreadPool(nThread);
如果我只是将nThread设置为1,它不会使用我所有的内核。发生什么事了
我的任务不涉及读取文件或网络。它创建对象并进行计算。但是,它从向量中读取数据
多线程从同一向量读取数据会降低性能吗?如果是这样的话,我该如何修复呢?向量是一种旧的列表实现,它依赖于锁来提供线程安全性。如果多个线程同时访问该向量,这些线程将遭受锁争用,这可能就是您现在遇到的情况
如果只从中读取向量,我将用ArrayList(或数组)替换它。因为没有进行锁定,并且在只读数据结构的情况下,不需要进行锁定。如果线程的数量大于此数量,而与任务的数量无关,则上下文切换将很慢,因为线程池执行器中的线程具有相同的优先级,并且必须在它们之间共享CPU。线程的数量越多,线程等待监视器的机会就越大 即使没有同步,更多的线程数量也会严重影响性能。 在我所研究的一个应用程序中,有一个xml解析任务需要100毫秒,当线程数从10个增加到50个时,解析时间增加到5秒
配置线程池是一件学习和实现的事情。这取决于CPU中的内核数量,更多的内核将允许更多的并行处理。为我们展示一些代码,以及一些时间。是的,对访问同步共享资源的任务进行并行化会降低速度。您是否验证过使用不同的数据结构(如ArrayList)会提高性能?