streamとparallelStreamについての考察

Java8で導入されるstreamとparallelStream。どういった場面で、どちらを使うのがベターなのか?についてのまとめ
7
YOSHIDA Takafumi @zephiransas

streamとparallelStreamの使い分けってどういう方針がいいのだろう?parallelStreamだけでいいのかな?

2014-03-05 15:31:36
ゆとり🇺🇦 @megascus

@zephiransas 一つの処理ですべてのリソースを使い切ってよいのであれば。サーバーサイドだとstreamしか使いませんねー。

2014-03-05 15:32:38
YOSHIDA Takafumi @zephiransas

@megascus ここでの想定はサーバサイドとして、parallelStreamで処理を行うとマシンのリソースを専有しちゃうので、他の処理のためにstreamで余力を残すってイメージであってる?

2014-03-05 15:35:47
AOE Takashi @aoetk

@zephiransas 対象となるレコードの件数が余程多くならないとparallelの効果は出ないですよ。逆にオーバーヘッドになります。JavaOne2013のBrian Goetzさんのスライドとかにベンチマーク結果があります。

2014-03-05 15:41:35
Toshiaki Maki @making

@zephiransas 往々にしてparallelStreamの方がオーバーヘッドの分遅いイメージがあります(未検証w) 並行で外部システム叩く時とか、すごい大量のマージソートしたいときはparallelの方が速そう(イメージw)

2014-03-05 15:41:51
YOSHIDA Takafumi @zephiransas

@aoetk @making なるほど。普段使いであればstreamって感じですかねぇ^^;;

2014-03-05 15:43:03
ゆとり🇺🇦 @megascus

@zephiransas イメージあってます。複数リクエストを常に受け付け続けているている想定なので他のThreadに迷惑かけちゃあかんでしょうという。

2014-03-05 15:45:41
YOSHIDA Takafumi @zephiransas

まとめると、相当な量のデータを扱う以外であればstreamを使うのがベター

2014-03-05 15:49:06
YOSHIDA Takafumi @zephiransas

理由は 1.他の処理のために、parallelStreamでマシンのリソースを専有しないようにするため 2.parallelStreamはかなりの量のデータを扱う場合でないと、逆にオーバーヘッド分、遅くなる場合も

2014-03-05 15:49:32
Yuichi Sakuraba @skrb

@megascus @zephiransas それってほんとにParallelStreamのスケジューリングのこと理解して言ってますか?

2014-03-05 15:53:40
YOSHIDA Takafumi @zephiransas

ちょうどいいものが / Java8のStreamとParallelStreamの使い分けについて by @clomie on @Qiita http://t.co/okwUy6rtFw

2014-03-05 15:56:42
Yuichi Sakuraba @skrb

@zephiransas これも、ちゃんと理解しないで書いてますね。ParallelStreamが意味をなさない場合もあります (parallel()にしてもシーケンシャルに処理される場合があるのです)。

2014-03-05 15:59:08
Yuichi Sakuraba @skrb

@megascus @zephiransas じゃあ、ちゃんと理解してから言ってくれないかなぁ。なんのための細粒度タスクのパラレル化なのか考えないと。

2014-03-05 15:57:01
YOSHIDA Takafumi @zephiransas

@skrb ふむ。実はstreamとparallelStreamの使いわけの基準って、なにかないだろうか?と思案していました。自分ではこういう使い分けなのかなーと https://t.co/1DAdwcY6g6

2014-03-05 16:02:29
Yuichi Sakuraba @skrb

@zephiransas 2はいいと思うのですが、1は意外とCPUは占有しないですよ。それよりも、Streamの処理には性質がいろいろあって、順番を守らなくてはいけないものなどはオーバーヘッドが大きくなります。また、LinkedListのstreamは遅いとかもあります。

2014-03-05 16:11:19
Yuichi Sakuraba @skrb

@zephiransas 今のところ、一番参考になるのはJavaOneのBrian GoetzのLambda in Top Gearです。 http://t.co/9ez9TAITMp

2014-03-05 16:12:26