From a6d248dc0436159461c152147b63bb077f130192 Mon Sep 17 00:00:00 2001
From: xiajf <1044304862@qq.com>
Date: Sat, 22 Jun 2019 21:34:24 +0800
Subject: [PATCH] =?UTF-8?q?=E5=B9=B6=E8=A1=8C=E6=B5=81=E4=BB=8B=E7=BB=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitignore | 27 ++++
6-Stream Pipelines.md | 48 +++++++
7-ParallelStream.md | 183 ++++++++++++++++++++++++++
Figures/13932958-263c866e35df81e5.png | Bin 0 -> 32709 bytes
Figures/13932958-dbceae46ea7c15c3.png | Bin 0 -> 119518 bytes
Figures/13932958-e1836ce1a66f41ec.png | Bin 0 -> 44847 bytes
Figures/13932958-ffe0d5ddd7101bbc.png | Bin 0 -> 69004 bytes
7 files changed, 258 insertions(+)
create mode 100644 .gitignore
create mode 100644 7-ParallelStream.md
create mode 100644 Figures/13932958-263c866e35df81e5.png
create mode 100644 Figures/13932958-dbceae46ea7c15c3.png
create mode 100644 Figures/13932958-e1836ce1a66f41ec.png
create mode 100644 Figures/13932958-ffe0d5ddd7101bbc.png
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9e557e4
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,27 @@
+# Created by .ignore support plugin (hsz.mobi)
+### Java template
+# Compiled class file
+*.class
+
+# Log file
+*.log
+
+# BlueJ files
+*.ctxt
+
+# Mobile Tools for Java (J2ME)
+.mtj.tmp/
+
+# Package Files #
+*.jar
+*.war
+*.nar
+*.ear
+*.zip
+*.tar.gz
+*.rar
+*.idea
+
+# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
+hs_err_pid*
+
diff --git a/6-Stream Pipelines.md b/6-Stream Pipelines.md
index 5fcaf3b..ede695d 100644
--- a/6-Stream Pipelines.md
+++ b/6-Stream Pipelines.md
@@ -32,6 +32,54 @@ int longestStringLengthStartingWithA
Stream操作分类 |
中间操作(Intermediate operations) | 无状态(Stateless) | unordered() filter() map() mapToInt() mapToLong() mapToDouble() flatMap() flatMapToInt() flatMapToLong() flatMapToDouble() peek() |
有状态(Stateful) | distinct() sorted() sorted() limit() skip() |
结束操作(Terminal operations) | 非短路操作 | forEach() forEachOrdered() toArray() reduce() collect() max() min() count() |
短路操作(short-circuiting) | anyMatch() allMatch() noneMatch() findFirst() findAny() |
Stream上的所有操作分为两类:中间操作和结束操作,中间操作只是一种标记,只有结束操作才会触发实际计算。中间操作又可以分为无状态的(*Stateless*)和有状态的(*Stateful*),无状态中间操作是指元素的处理不受前面元素的影响,而有状态的中间操作必须等到所有元素处理之后才知道最终结果,比如排序是有状态操作,在读取所有元素之前并不能确定排序结果;结束操作又可以分为短路操作和非短路操作,短路操作是指不用处理全部元素就可以返回结果,比如*找到第一个满足条件的元素*。之所以要进行如此精细的划分,是因为底层对每一种情况的处理方式不同。
+为了更好的理解流的中间操作和终端操作,可以通过下面的两段代码来看他们的执行过程。
+```Java
+IntStream.range(1, 10)
+ .peek(x -> System.out.print("\nA" + x))
+ .limit(3)
+ .peek(x -> System.out.print("B" + x))
+ .forEach(x -> System.out.print("C" + x));
+```
+输出为:
+A1B1C1
+A2B2C2
+A3B3C3
+中间操作是懒惰的,也就是中间操作不会对数据做任何操作,直到遇到了最终操作。而最终操作,都是比较热情的。他们会往前回溯所有的中间操作。也就是当执行到最后的forEach操作的时候,它会回溯到它的上一步中间操作,上一步中间操作,又会回溯到上上一步的中间操作,...,直到最初的第一步。
+第一次forEach执行的时候,会回溯peek 操作,然后peek会回溯更上一步的limit操作,然后limit会回溯更上一步的peek操作,顶层没有操作了,开始自上向下开始执行,输出:A1B1C1
+第二次forEach执行的时候,然后会回溯peek 操作,然后peek会回溯更上一步的limit操作,然后limit会回溯更上一步的peek操作,顶层没有操作了,开始自上向下开始执行,输出:A2B2C2
+
+...
+当第四次forEach执行的时候,然后会回溯peek 操作,然后peek会回溯更上一步的limit操作,到limit的时候,发现limit(3)这个job已经完成,这里就相当于循环里面的break操作,跳出来终止循环。
+
+再来看第二段代码:
+
+```Java
+IntStream.range(1, 10)
+ .peek(x -> System.out.print("\nA" + x))
+ .skip(6)
+ .peek(x -> System.out.print("B" + x))
+ .forEach(x -> System.out.print("C" + x));
+```
+输出为:
+A1
+A2
+A3
+A4
+A5
+A6
+A7B7C7
+A8B8C8
+A9B9C9
+第一次forEach执行的时候,会回溯peek操作,然后peek会回溯更上一步的skip操作,skip回溯到上一步的peek操作,顶层没有操作了,开始自上向下开始执行,执行到skip的时候,因为执行到skip,这个操作的意思就是跳过,下面的都不要执行了,也就是就相当于循环里面的continue,结束本次循环。输出:A1
+
+第二次forEach执行的时候,会回溯peek操作,然后peek会回溯更上一步的skip操作,skip回溯到上一步的peek操作,顶层没有操作了,开始自上向下开始执行,执行到skip的时候,发现这是第二次skip,结束本次循环。输出:A2
+
+...
+
+第七次forEach执行的时候,会回溯peek操作,然后peek会回溯更上一步的skip操作,skip回溯到上一步的peek操作,顶层没有操作了,开始自上向下开始执行,执行到skip的时候,发现这是第七次skip,已经大于6了,它已经执行完了skip(6)的job了。这次skip就直接跳过,继续执行下面的操作。输出:A7B7C7
+
+...直到循环结束。
+
## 一种直白的实现方式
diff --git a/7-ParallelStream.md b/7-ParallelStream.md
new file mode 100644
index 0000000..0e98fab
--- /dev/null
+++ b/7-ParallelStream.md
@@ -0,0 +1,183 @@
+# parallelStream 介绍
+
+## 引言
+大家应该已经对Stream有过很多的了解,对其原理及常见使用方法已经也有了一定的认识。流在处理数据进行一些迭代操作的时候确认很方便,但是在执行一些耗时或是占用资源很高的任务时候,串行化的流无法带来速度/性能上的提升,并不能满足我们的需要,通常我们会使用多线程来并行或是分片分解执行任务,而在Stream中也提供了这样的并行方法,那就是使用parallelStream()方法或者是使用stream().parallel()来转化为并行流。开箱即用的并行流的使用看起来如此简单,然后我们就可能会忍不住思考,并行流的实现原理是怎样的?它的使用会给我们带来多大的性能提升?我们可以在什么场景下使用以及使用时应该注意些什么?
+
+首先我们看一下Java 的并行 API 演变历程基本如下:
+- 1.0-1.4 中的 java.lang.Thread
+- 5.0 中的 java.util.concurrent
+- 6.0 中的 Phasers 等
+- 7.0 中的 Fork/Join 框架
+- 8.0 中的 Lambda
+
+## parallelStream是什么?
+先看一下`Collection`接口提供的并行流方法
+```java
+/**
+ * Returns a possibly parallel {@code Stream} with this collection as its
+ * source. It is allowable for this method to return a sequential stream.
+ *
+ * This method should be overridden when the {@link #spliterator()}
+ * method cannot return a spliterator that is {@code IMMUTABLE},
+ * {@code CONCURRENT}, or late-binding. (See {@link #spliterator()}
+ * for details.)
+ *
+ * @implSpec
+ * The default implementation creates a parallel {@code Stream} from the
+ * collection's {@code Spliterator}.
+ *
+ * @return a possibly parallel {@code Stream} over the elements in this
+ * collection
+ * @since 1.8
+ */
+default Stream parallelStream() {
+ return StreamSupport.stream(spliterator(), true);
+}
+```
+注意其中的代码注释的返回值 `@return a possibly parallel` 一句说明调用了这个方法,只是可能会返回一个并行的流,流是否能并行执行还受到其他一些条件的约束。
+parallelStream其实就是一个并行执行的流,它通过默认的`ForkJoinPool`,**可能**提高你的多线程任务的速度。
+引用[Custom thread pool in Java 8 parallel stream](https://stackoverflow.com/questions/21163108/custom-thread-pool-in-java-8-parallel-stream)上面的两段话:
+> The parallel streams use the default `ForkJoinPool.commonPool` which [by default has one less threads as you have processors](http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ForkJoinPool.html), as returned by `Runtime.getRuntime().availableProcessors()` (This means that parallel streams use all your processors because they also use the main thread)。
+
+做个实验来证明上面这句话的真实性:
+```java
+public static void main(String[] args) {
+ IntStream list = IntStream.range(0, 10);
+ Set threadSet = new HashSet<>();
+ //开始并行执行
+ list.parallel().forEach(i -> {
+ Thread thread = Thread.currentThread();
+ System.err.println("integer:" + i + "," + "currentThread:" + thread.getName());
+ threadSet.add(thread);
+ });
+ System.out.println("all threads:" + Joiner.on(",").join(threadSet.stream().map(Thread::getName).collect(Collectors.toList())));
+}
+```
+
+
+从运行结果里面我们可以很清楚的看到parallelStream同时使用了主线程和`ForkJoinPool.commonPool`创建的线程。
+值得说明的是这个运行结果并不是唯一的,实际运行的时候可能会得到多个结果,比如:
+
+
+
+甚至你的运行结果里面只有主线程。
+
+来源于java 8 实战的书籍的一段话:
+> 并行流内部使用了默认的`ForkJoinPool`(7.2节会进一步讲到分支/合并框架),它默认的线程数量就是你的处理器数量,这个值是由`Runtime.getRuntime().available- Processors()`得到的。 但是你可以通过系统属性`java.util.concurrent.ForkJoinPool.common. parallelism`来改变线程池大小,如下所示: `System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism","12");` 这是一个全局设置,因此它将影响代码中所有的并行流。反过来说,目前还无法专为某个 并行流指定这个值。一般而言,让`ForkJoinPool`的大小等于处理器数量是个不错的默认值, 除非你有很好的理由,否则我们强烈建议你不要修改它。
+
+```java
+// 设置全局并行流并发线程数
+System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism", "12");
+System.out.println(ForkJoinPool.getCommonPoolParallelism());// 输出 12
+System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism", "20");
+System.out.println(ForkJoinPool.getCommonPoolParallelism());// 输出 12
+```
+为什么两次的运行结果是一样的呢?上面刚刚说过了这是一个全局设置,`java.util.concurrent.ForkJoinPool.common.parallelism`是final类型的,整个JVM中只允许设置一次。既然默认的并发线程数不能反复修改,那怎么进行不同线程数量的并发测试呢?答案是:`引入ForkJoinPool`
+```java
+IntStream range = IntStream.range(1, 100000);
+// 传入parallelism
+new ForkJoinPool(parallelism).submit(() -> range.parallel().forEach(System.out::println)).get();
+```
+因此,使用parallelStream时需要注意的一点是,**多个parallelStream之间默认使用的是同一个线程池**,所以IO操作尽量不要放进parallelStream中,否则会阻塞其他parallelStream。
+> Using a ForkJoinPool and submit for a parallel stream does not reliably use all threads. If you look at this ( [Parallel stream from a HashSet doesn't run in parallel](https://stackoverflow.com/questions/28985704/parallel-stream-from-a-hashset-doesnt-run-in-parallel) ) and this ( [Why does the parallel stream not use all the threads of the ForkJoinPool?](https://stackoverflow.com/questions/36947336/why-does-the-parallel-stream-not-use-all-the-threads-of-the-forkjoinpool) ), you'll see the reasoning.
+
+```java
+// 获取当前机器CPU处理器的数量
+System.out.println(Runtime.getRuntime().availableProcessors());// 输出 4
+// parallelStream默认的并发线程数
+System.out.println(ForkJoinPool.getCommonPoolParallelism());// 输出 3
+```
+为什么parallelStream默认的并发线程数要比CPU处理器的数量少1个?文章的开始已经提过了。因为最优的策略是每个CPU处理器分配一个线程,然而主线程也算一个线程,所以要占一个名额。
+这一点可以从源码中看出来:
+```java
+static final int MAX_CAP = 0x7fff; // max #workers - 1
+// 无参构造函数
+public ForkJoinPool() {
+ this(Math.min(MAX_CAP, Runtime.getRuntime().availableProcessors()),
+ defaultForkJoinWorkerThreadFactory, null, false);
+}bs-channel
+```
+
+## 从parallelStream认识[Fork/Join 框架](https://www.infoq.cn/article/fork-join-introduction/)
+Fork/Join 框架的核心是采用分治法的思想,将一个大任务拆分为若干互不依赖的子任务,把这些子任务分别放到不同的队列里,并为每个队列创建一个单独的线程来执行队列里的任务。同时,为了最大限度地提高并行处理能力,采用了工作窃取算法来运行任务,也就是说当某个线程处理完自己工作队列中的任务后,尝试当其他线程的工作队列中窃取一个任务来执行,直到所有任务处理完毕。所以为了减少线程之间的竞争,通常会使用双端队列,被窃取任务线程永远从双端队列的头部拿任务执行,而窃取任务的线程永远从双端队列的尾部拿任务执行。
+- Fork/Join 的运行流程图
+
+
+简单地说就是大任务拆分成小任务,分别用不同线程去完成,然后把结果合并后返回。所以第一步是拆分,第二步是分开运算,第三步是合并。这三个步骤分别对应的就是Collector的*supplier*,*accumulator*和*combiner*。
+- 工作窃取算法
+Fork/Join最核心的地方就是利用了现代硬件设备多核,在一个操作时候会有空闲的CPU,那么如何利用好这个空闲的cpu就成了提高性能的关键,而这里我们要提到的工作窃取(work-stealing)算法就是整个Fork/Join框架的核心理念,工作窃取(work-stealing)算法是指某个线程从其他队列里窃取任务来执行。
+
+
+## 使用parallelStream的利弊
+使用parallelStream的几个好处:
+1) 代码优雅,可以使用lambda表达式,原本几句代码现在一句可以搞定;
+2) 运用多核特性(forkAndJoin)并行处理,大幅提高效率。
+关于并行流和多线程的性能测试可以看一下下面的几篇博客:
+[并行流适用场景-CPU密集型](https://blog.csdn.net/larva_s/article/details/90403578)
+[提交订单性能优化系列之006-普通的Thread多线程改为Java8的parallelStream并发流](https://blog.csdn.net/blueskybluesoul/article/details/82817007)
+
+然而,任何事物都不是完美的,并行流也不例外,其中最明显的就是使用(parallel)Stream极其不便于代码的跟踪调试,此外并行流带来的不确定性也使得我们对它的使用变得格外谨慎。我们得去了解更多的并行流的相关知识来保证自己能够正确的使用这把双刃剑。
+
+parallelStream使用时需要注意的点:
+1) **parallelStream是线程不安全的;**
+```java
+List values = new ArrayList<>();
+IntStream.range(1, 10000).parallel().forEach(values::add);
+System.out.println(values.size());
+```
+values集合大小可能不是10000。集合里面可能会存在null元素或者抛出下标越界的异常信息。
+原因:List不是线程安全的集合,add方法在多线程环境下会存在并发问题。
+当执行add方法时,会先将此容器的大小增加。。即size++,然后将传进的元素赋值给新增的`elementData[size++]`,即新的内存空间。但是此时如果在size++后直接来取这个List,而没有让add完成赋值操作,则会导致此List的长度加一,,但是最后一个元素是空(null),所以在获取它进行计算的时候报了空指针异常。而下标越界还不能仅仅依靠这个来解释,如果你观察发生越界时的数组下标,分别为10、15、22、33、49和73。结合前面讲的数组自动机制,数组初始长度为10,第一次扩容为15=10+10/2,第二次扩容22=15+15/2,第三次扩容33=22+22/2...以此类推,我们不难发现,越界异常都发生在数组扩容之时。
+`grow()`方法解释了基于数组的ArrayList是如何扩容的。数组进行扩容时,会将老数组中的元素重新拷贝一份到新的数组中,通过`oldCapacity + (oldCapacity >> 1)`运算,每次数组容量的增长大约是其原容量的1.5倍。
+ ```java
+ /**
+ * Increases the capacity to ensure that it can hold at least the
+ * number of elements specified by the minimum capacity argument.
+ *
+ * @param minCapacity the desired minimum capacity
+ */
+ private void grow(int minCapacity) {
+ // overflow-conscious code
+ int oldCapacity = elementData.length;
+ int newCapacity = oldCapacity + (oldCapacity >> 1);// 1.5倍扩容
+ if (newCapacity - minCapacity < 0)
+ newCapacity = minCapacity;
+ if (newCapacity - MAX_ARRAY_SIZE > 0)
+ newCapacity = hugeCapacity(minCapacity);
+ // minCapacity is usually close to size, so this is a win:
+ elementData = Arrays.copyOf(elementData, newCapacity);// 拷贝旧的数组到新的数组中
+ }
+
+
+ /**
+ * Appends the specified element to the end of this list.
+ *
+ * @param e element to be appended to this list
+ * @return true (as specified by {@link Collection#add})
+ */
+ public boolean add(E e) {
+ ensureCapacityInternal(size + 1); // Increments modCount!! 检查array容量
+ elementData[size++] = e;// 赋值,增大Size的值
+ return true;
+ }
+```
+解决方法:
+加锁、使用线程安全的集合或者采用`collect()`或者`reduce()`操作就是满足线程安全的了。
+```java
+List values = new ArrayList<>();
+for (int i = 0; i < 10000; i++) {
+ values.add(i);
+}
+List collect = values.stream().parallel().collect(Collectors.toList());
+System.out.println(collect.size());
+```
+2) parallelStream 适用的场景是CPU密集型的,只是做到别浪费CPU,假如本身电脑CPU的负载很大,那还到处用并行流,那并不能起到作用;
+- I/O密集型 磁盘I/O、网络I/O都属于I/O操作,这部分操作是较少消耗CPU资源,一般并行流中不适用于I/O密集型的操作,就比如使用并流行进行大批量的消息推送,涉及到了大量I/O,使用并行流反而慢了很多
+- CPU密集型 计算类型就属于CPU密集型了,这种操作并行流就能提高运行效率。
+
+3) 不要在多线程中使用parallelStream,原因同上类似,大家都抢着CPU是没有提升效果,反而还会加大线程切换开销;
+4) 会带来不确定性,请确保每条处理无状态且没有关联;
+5) 考虑NQ模型:N可用的数据量,Q针对每个数据元素执行的计算量,乘积 N * Q 越大,就越有可能获得并行提速。N * Q>10000(大概是集合大小超过1000) 就会获得有效提升;
+6) parallelStream是创建一个并行的Stream,而且它的并行操作是*不具备线程传播性*的,所以是无法获取ThreadLocal创建的线程变量的值;
+7) **在使用并行流的时候是无法保证元素的顺序的,也就是即使你用了同步集合也只能保证元素都正确但无法保证其中的顺序**;
+8) lambda的执行并不是瞬间完成的,所有使用parallel stream的程序都有可能成为阻塞程序的源头,并且在执行过程中程序中的其他部分将无法访问这些workers,这意味着任何依赖parallel streams的程序在什么别的东西占用着common ForkJoinPool时将会变得不可预知并且暗藏危机。
\ No newline at end of file
diff --git a/Figures/13932958-263c866e35df81e5.png b/Figures/13932958-263c866e35df81e5.png
new file mode 100644
index 0000000000000000000000000000000000000000..103fd1d8f730336f11889ef14bfd15958c39444e
GIT binary patch
literal 32709
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