Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ◆ 並列処理
- サンプルでActivatorというプロジェクト管理のライブラリを使っていたので、それを使用
- (sbtと同様なもの)
- Activatorのインストール
- $ sudo brew install typesafe-activator
- プロジェクトを作りたいディレクトリで下記実行(今回はminimal-scalaというものを使う)
- AC-A-069:scala_prac2 *****$ sudo activator new
- Password:
- Enter an application name
- > test3
- The new application will be created in /Users/*****/Desktop/scala_prac2/test3
- Enter a template name, or hit tab to see a list of possible templates
- > minimal-scala
- OK, application "test3" is being created using the "minimal-scala" template.
- To run "test3" from the command-line, run:
- /Users/*****/Desktop/scala_prac2/test3/activator run
- To run the test for "test3" from the command-line, run:
- /Users/*****/Desktop/scala_prac2/test3/activator test
- To run the Activator UI for "test3" from the command-line, run:
- /Users/*****/Desktop/scala_prac2/test3/activator ui
- プロジェクトが作成されるので、そのディレクトリに移動
- 下記のように何もせずに実行すると、最初から入っているHelloWorldを出力するファイルが実行される
- MAC-A-069:scala_prac2 *****$ cd test3
- MAC-A-069:test3 *****$ ls
- LICENSE activator-launch-1.0.0.jar project
- activator build.sbt src
- MAC-A-069:test3 *****$ sudo ./activator run
- [info] Loading project definition from /Users/*****/Desktop/scala_prac2/test3/project
- [warn] Multiple resolvers having different access mechanism configured with same name 'typesafe-ivy-releases'. To avoid conflict, Remove duplicate project resolvers (`resolvers`) or rename publishing resolver (`publishTo`).
- [info] Updating {file:/Users/*****/Desktop/scala_prac2/test3/project/}test3-build...
- [info] Resolving org.fusesource.jansi#jansi;1.4 ...
- [info] Done updating.
- [info] Set current project to test3 (in build file:/Users/*****/Desktop/scala_prac2/test3/)
- [info] Updating {file:/Users/*****/Desktop/scala_prac2/test3/}test3...
- [info] Resolving jline#jline;2.11 ...
- [info] Done updating.
- [info] Compiling 1 Scala source to /Users/*****/Desktop/scala_prac2/test3/target/scala-2.11/classes...
- [info] Running com.example.Hello
- Hello, world!
- [success] Total time: 4 s, completed 2015/02/04 11:54:45
- まず並列処理せず通常実行するプログラムと実行結果
- プログラムはsrc/main/scala/com/example/に置く
- package com.example
- object Parallel {
- def main(args: Array[String]) {
- (1 to 10).map { i =>
- println(i)
- Thread.sleep(500)
- }
- }
- }
- MAC-A-069:test3 *****$ ./activator
- [info] Loading project definition from /Users/*****/Desktop/scala_prac2/test3/project
- [warn] Multiple resolvers having different access mechanism configured with same name 'typesafe-ivy-releases'. To avoid conflict, Remove duplicate project resolvers (`resolvers`) or rename publishing resolver (`publishTo`).
- [info] Set current project to test3 (in build file:/Users/*****/Desktop/scala_prac2/test3/)
- > runMain com.example.Parallel
- [info] Compiling 1 Scala source to /Users/*****/Desktop/scala_prac2/test3/target/scala-2.11/classes...
- [info] Running com.example.Parallel
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- [success] Total time: 9 s, completed 2015/02/04 12:07:26
- > runMain com.example.Parallel
- [info] Running com.example.Parallel
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- [success] Total time: 5 s, completed 2015/02/04 12:07:34
- 1度目はコンパイルするので少々遅いがその後は早い
- 今回は5秒で実行が終わる
- 次に並列処理
- package com.example
- object Parallel {
- def main(args: Array[String]) {
- (1 to 10).par.map { i =>
- println(i)
- Thread.sleep(500)
- }
- }
- }
- MAC-A-069:test3 *****$ ./activator
- [info] Loading project definition from /Users/*****/Desktop/scala_prac2/test3/project
- [warn] Multiple resolvers having different access mechanism configured with same name 'typesafe-ivy-releases'. To avoid conflict, Remove duplicate project resolvers (`resolvers`) or rename publishing resolver (`publishTo`).
- [info] Set current project to test3 (in build file:/Users/*****/Desktop/scala_prac2/test3/)
- > runMain com.example.Parallel
- [info] Compiling 1 Scala source to /Users/*****/Desktop/scala_prac2/test3/target/scala-2.11/classes...
- [info] Running com.example.Parallel
- 1
- 2
- 3
- 6
- 4
- 8
- 7
- 5
- 9
- 10
- [success] Total time: 6 s, completed 2015/02/04 12:13:15
- > runMain com.example.Parallel
- [info] Running com.example.Parallel
- 1
- 3
- 8
- 6
- 2
- 7
- 4
- 9
- 5
- 10
- [success] Total time: 2 s, completed 2015/02/04 12:13:18
- ループ処理の際に.parをつけるとコレクション(今回は1~10が入ったmap)が並列コレクションに変換され並列処理される。
- 並列コレクションを使用すると、プログラムを実行しているPCのCPUコア数に応じてスレッドを分割して実行します(※並列化のコストも掛かるので、要素数や処理内容によっては遅くなることもあります)。
- 実際に並列処理すると通常5秒かかっていた処理が2秒で終わる。
- ただ、順序がばらばらになるので注意
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement