Ruby/並列処理/Parallel

Ruby/並列処理/Parallel

Ruby の並列処理のためのライブラリ Parallel に関して

Install

Gemfile

source "https://rubygems.org"
gem "parallel"
$ bundle install --path vendor/bundle

基本

このように書くと 1〜100 までの表示を4本並行(プロセスで)実行する。in_thread と書くとマルチスレッド処理になる。

Parallel.each(1..100, in_process: 4) do | i |
  p i
end

このように、並列に4本ずつ実行されるため、順番が多少崩れて表示されるのがわかる。

$ bundle exec ruby hoge.rb
1
7
3
8
2
5
4
6
10
12
13
14
9
15
16
17
11
18
19
21
20
23
22
24
25
27
26
29
28
30
31
32
33
35
34
36
37
38
39
40
41
42
43
44
45
47
46
48
49
51
50
53
52
55
54
56
57
58
60
59
61
62
63
64
65
66
67
68
69
70
71
72
74
73
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
99
100
98

全体の処理としては Parallel が統合管理していて、全部の処理が終わるまで、each のブロックの処理は終わらないことになっている。 つまり、最後の終了に関しては同期的に実行されることになっている。

マルチコア対応

Ruby はその設計上マルチスレッド処理ではマルチコアCPUの恩恵をあまりうけられないようで、マルチプロセスで動かしたほうが明らかにパフォーマンスがよい。

ruby/parallel_proc/parallel.txt · 最終更新: 2018-08-14 15:50 by ore