数据并行化

1、什么叫做并行?什么叫做并发?

  • <b>并行</b>:多个任务在同一个时刻发生。
  • <b>并发</b>:多个任务无法在同一个时刻发生,但这个时间段已经存在多个任务同时启动了。CPU给他们分配不同的时间片去运行。——并发
并发与并行

2、什么叫做数据并行化?什么叫做任务并行化?

  • <b>数据并行化</b>:将数据分块,为每块数据分配单独的处理单元上。
  • <b>任务并行化</b>:在这个模型中,每一个线程执行一个分配到的任务,而这些线程则被分配(通常是操作系统内核)到该并行计算体系的各个计算节点中去。

3、并行化代码

package com.tinygao.thread.stream;

import com.google.common.base.Stopwatch;
import lombok.extern.slf4j.Slf4j;

import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Stream;

import static com.google.common.collect.ImmutableList.of;

/**
 * Created by gsd on 2017/1/25.
 */
@Slf4j
public class ParallelStreamTest {
    public static void main(String[] args) {
        List<String> tinygao1 = new ArrayList<>();
        List<String> tinygao2 = new ArrayList<>();
        List<String> tinygao3 = new ArrayList<>();
        initList(tinygao1, tinygao2, tinygao3);

        Stopwatch s = Stopwatch.createStarted();
        int lengthNum = Stream.of(tinygao1,tinygao2,tinygao3)
                                .flatMap(x-> x.stream())
                                .mapToInt(x->x.length())
                                .sum();
        log.info("lengthNum :{} , waster : {} ms",
                    lengthNum,
                    s.elapsed(TimeUnit.MILLISECONDS));


        /*集合类都有parallelStream方法,实现并行化*/
        s.reset().start();
        int parallelLengthNum = Stream.of(tinygao1,tinygao2,tinygao3)
                                        .flatMap(x-> x.parallelStream())
                                        .mapToInt(x->x.length())
                                        .sum();
        log.info("parallelLengthNum :{} , waster : {} ms",
                    parallelLengthNum,
                    s.elapsed(TimeUnit.MILLISECONDS));
        s.stop();
    }

    private static void initList(List<String> tinygao1,
                                  List<String> tinygao2,
                                  List<String> tinygao3) {
        for(int i = 0; i < 5000000; i++) {
            tinygao1.add("tinygao1"+i);
            tinygao2.add("tinygao2"+i);
            tinygao3.add("tinygao3"+i);
        }
    }
}

4、结果

lengthNum :221666670 , waster : 341 ms
parallelLengthNum :221666670 , waster : 138 ms

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 6.1 并行和并发 并发是两个任务共享时间段。并行则是两个任务同一时间发生,比如运行在多核CPU上。 如果一个程序...
    伊凡的一天阅读 540评论 0 2
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,391评论 11 349
  • 原文地址 http://www.cnblogs.com/kenshincui/p/3983982.html 大家都...
    怎样m阅读 1,320评论 0 1
  • 从哪说起呢? 单纯讲多线程编程真的不知道从哪下嘴。。 不如我直接引用一个最简单的问题,以这个作为切入点好了 在ma...
    Mr_Baymax阅读 2,841评论 1 17
  • 每个人的心里都有座孤城。 无数次幻想过自己的一生。 南国偏僻的一角有我的小城。除了我没有人烟。一条幽静的小路蜿蜒而...
    本宝宝的路就在脚下阅读 380评论 0 0