NetBeans 8 Dev を使って Lambda で遊ぶ その3
今日も NetBeans 8 Dev を使って Lambda で遊んでみます。
せっかく優秀な統合開発環境を使ってるんだからその機能を使って Lambda の並行処理がちゃんとされているか確認します。
決して疑ってる訳ではございません。
でも、この眼でしっかり確認してみたいだけです。
ってことで昨日作ったプログラムをちょこっと変更して本当に Fork / join Framework が呼び出されているか見てみます。
jp\yucchi\mylambdasample\MyLambdaSample.java |
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
// テスト用メンバーを作成 for (int i = 0; i < 20_000_000; i++) { member.add( new MyTeam( "TEST" + i, LocalDate.of(1995, 1, 1), MyTeam.Sex.FEMALE, 90, random.nextInt(20_000_000))); } // MyBestMember FightingPower 最大値を表示 System.out.println("<-- MyBestMember FightingPower 最大値を表示 -->"); long startTime = System.nanoTime(); Integer reduce = member.stream().filter(m -> m.getGender() == MyTeam.Sex.FEMALE && m.getAge() >= 16 && m.getAge() <= 29 && m.getBreast() >= 76) .map(MyTeam::getFightingPower) .reduce(0, Math::max); System.out.println(reduce); long time = System.nanoTime() - startTime; System.out.println((int) (time * 1e-9) / 3_600 + "時間" + (int) ((time * 1e-9) / 60) % 60 + "分" + (int) (time * 1e-9 % 60) + "秒" + Double.toString((time * 1e-9 % 60) % 1).substring(2)); } } |
このようにテスト用メンバーを適当に追加して strean() メソッドを使った処理と parallelStream() メソッドを使った場合の違いを確認します。
まず、stream() メソッドを使った時の実行結果は次のようになりました。
run:
<– MyBestMember FightingPower 最大値を表示 –>
19999999
0時間0分41秒8805609010000026
BUILD SUCCESSFUL (total time: 1 minute 0 seconds)
次に昨日のように parallelStream() メソッドを使った場合は
run:
<– MyBestMember FightingPower 最大値を表示 –>
19999999
0時間0分20秒9766124870000006
BUILD SUCCESSFUL (total time: 43 seconds)
このように parallelStream() メソッドを使った方が高速に処理されることが確認できました。
このようにはっきりとした違いが確認できたので次はその仕組みである parallelStream() メソッドを使うと
Fork / join Framework が呼び出されて並行処理をしているところを NetBeans のプロファイラにて暴き出してみてみます。
まず、貧相な stream() メソッドを使った場合からみてみます。
次に贅沢な parallelStream() メソッドを使った場合はこうなります。
このように parallelStream() メソッドを使った場合は Fork / join Framework が呼び出されているのが解ります。
stream() メソッドの存在価値ってどうなんでしょう?
贅沢な parallelStream() メソッドを使っていればいいのかな?
使い分けシチュエーションがちょっと解りません。
今時、携帯電話さえマルチコアになってるんだからとりあえず parallelStream() メソッドを使っとけばいいのか?
とりあえず Lambda を使えばこのような並行処理プログラミングを意識しないでも簡単に実装できてしまうってことね。
Comment
Suggested Browsing http://hardlytrainedprofessionals.com emedsoft.com Repair Shops Close To Me
Trackback
2019年10月30日1:48 AM(編集)
Suggested Browsing ゆっちのBlog » NetBeans 8 Dev を使って Lambda で遊ぶ その3
2020年5月21日11:25 PM(編集)
http://hardlytrainedprofessionals.com ゆっちのBlog » NetBeans 8 Dev を使って Lambda で遊ぶ その3
2020年6月16日11:08 PM(編集)
emedsoft.com ゆっちのBlog » NetBeans 8 Dev を使って Lambda で遊ぶ その3
2022年7月26日1:11 AM(編集)
Repair Shops Close To Me ゆっちのBlog » NetBeans 8 Dev を使って Lambda で遊ぶ その3
Trackback URL