java - 什么时候并行执行任务是一种矫枉过正的行为?

标签 java multithreading performance concurrency parallel-processing

我有一段java代码,它从xml构造一个对象,并且根据对象大小需要一些纳秒到毫秒。有时我必须循环调用该方法 1-2 次,有时 70-80 次才能构造对象列表。

我尝试并行构建对象,但有时它花费的时间是顺序的两倍,而其他时间则为一半。现在我的问题是,是否有任何指南或性能比较指标来指导何时应该使用多任务处理以及何时使用多任务处理?

我正在使用的示例代码是:

    List<Callable<Integer>> tasks = new ArrayList<Callable<Integer>>();
    for (final Integer object : list) {
        Callable<Integer> c = new Callable<Integer>() {
            @Override
            public Integer call() throws Exception {
                    return test.m1(object);
            }
        };
        tasks.add(c);
    }
    List<Future<Integer>> results = EXEC.invokeAll(tasks);

    for (Future<Integer> fr : results) {
        fr.get();
    }

最佳答案

看看 Doug Lea 的帖子 "When to use parallel streams" .

当并行计算开始有意义时,粗略估计(十倍以内)顺序执行的时间为100 微秒。尽管还有更多因素需要考虑。

关于java - 什么时候并行执行任务是一种矫枉过正的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29618653/

相关文章:

c++ - 如何使用 Open MPI 使我的程序更快?我的 Open MPI 程序目前比原来的程序慢,我不明白什么?

html - 加载时的网页分解

java - Java 中 System.out.printf 命令的问题

java - 更新/重新创建 JList

c - Windows 中的高级 C 编程(pthreads、信号和信号量,天哪!)

PHP图像动态调整大小与存储调整大小的图像

java - 如何使其实时数据观察器基于用户点击事件工作并接受一些用户输入,但应该从 onCreate 开始观察?

java - Spring MVC - 使用 @ResponseBody 时设置 JAXB 编码器属性

c++ - memory_order_relaxed 负载与易变负载

c# - 如何在保存后立即检索 objectId