java – 为什么增加newFixedThreadPool导致性能不佳?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 为什么增加newFixedThreadPool导致性能不佳?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2252字,纯文字阅读大概需要4分钟。
内容图文
我正在尝试更改报告的执行并将其以并发方式完成.在’serail模式’中,执行测试需要30秒,当使用并发模式时,我得到27秒(考虑到连续几步必须采取结果).
我仍然没有得到的是这一行:
ExecutorService executor = Executors.newFixedThreadPool(4);
我的计算机装有2×2.6 Ghz四核,如果newFixedThreadPool为高(16),我希望执行时间会减少.实际上,我增加newFixedThreadPool越多,执行速度越慢.这引出了一个问题:我做错了什么或者我没理解什么?!?!
我从我的执行中嵌入了2个结果截图.
A. newSingleThreadExecuter – 在23秒内运行
B. newFixedThreadPool(4) – 在43秒内运行.
每次我提交一个’Worker’我得到system.out currentTimeMillis和’fatched tkt’结果是从db获取数据所需的毫秒数. (在策略A中 – 它需要约3毫秒,而在B中最多需要7毫秒).
Stopper stopper = new Stopper();
for (Long iNum : multimap.asMap().keySet())
{
List<Long> tickets = (List<Long>) multimap.get(iNum);
for (Long ticketNumber : tickets)
{
pojoPks = getPkData(iNum);
Callable<PojoTicket> worker = new MaxCommThread(ticketNumber, pojoPks);
Future<PojoTicket> submit = executor.submit(worker);
futures.add(submit);
}
}
System.out.println("futurues: " +futures.size());
for (Future<PojoTicket> future : futures)
{
try
{
PojoTicket pojoTicket = future.get();
//do the rest here
} catch (InterruptedException e)
{
System.out.println("---------------------->InterruptedException");
} catch (ExecutionException e)
{
System.out.println("---------------------->ExecutionException");
}
}
executor.shutdown();
stopper.stop();
解决方法:
the more I increase the newFixedThreadPool the slower the execution
通常,如果您将线程添加到作业并且不会加快速度,则可能是由于以下几种原因之一:
>每个作业都必须在某种资源上同步,因此它们都在争夺锁争用而不是独立运行.
>作业没有太多的CPU工作要做.将线程添加到IO绑定进程不会使事情变得更快,因为IO通道可能已经被最大化.
但是,如果您的应用程序运行速度快一半,那么这是一个有趣的情况.我只能猜测它是两者的组合.
要尝试的一件事是从1个线程开始,然后尝试2.如果它运行得不快,那么首先看看作业之间共享的锁.每个作业正在修改哪些并发集合或其他对象?尝试减少锁的数量或让线程存储临时信息,然后锁定一次以更新中心对象.
您还可以查看系统统计信息,以查看IO通道是否已超出范围.磁盘是一个常见的问题.查看是否可以在内存磁盘上运行以查看应用程序是否运行得更快.这将是您受IO约束的指标.
最后,我将研究为什么在获得工作时获得任何ExecutionExceptions.这可能是其他一些问题的指标,但您应该首先理解这一点.
内容总结
以上是互联网集市为您收集整理的java – 为什么增加newFixedThreadPool导致性能不佳?全部内容,希望文章能够帮你解决java – 为什么增加newFixedThreadPool导致性能不佳?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。