數據并行化

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上。 如果一個程序...
    伊凡的一天閱讀 512評論 0 2
  • 從三月份找實習到現在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發崗...
    時芥藍閱讀 42,341評論 11 349
  • 原文地址 http://www.cnblogs.com/kenshincui/p/3983982.html 大家都...
    怎樣m閱讀 1,296評論 0 1
  • 從哪說起呢? 單純講多線程編程真的不知道從哪下嘴。。 不如我直接引用一個最簡單的問題,以這個作為切入點好了 在ma...
    Mr_Baymax閱讀 2,818評論 1 17
  • 每個人的心里都有座孤城。 無數次幻想過自己的一生。 南國偏僻的一角有我的小城。除了我沒有人煙。一條幽靜的小路蜿蜒而...
    本寶寶的路就在腳下閱讀 374評論 0 0