concurrent-ruby 0.7.0 → 0.7.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +138 -0
- data/README.md +73 -105
- data/lib/concurrent/actor.rb +11 -12
- data/lib/concurrent/actor/behaviour/errors_on_unknown_message.rb +1 -1
- data/lib/concurrent/actor/behaviour/linking.rb +4 -1
- data/lib/concurrent/actor/behaviour/pausing.rb +2 -2
- data/lib/concurrent/actor/behaviour/supervised.rb +2 -1
- data/lib/concurrent/actor/behaviour/termination.rb +1 -1
- data/lib/concurrent/actor/context.rb +2 -1
- data/lib/concurrent/actor/core.rb +7 -3
- data/lib/concurrent/actor/utils/balancer.rb +4 -2
- data/lib/concurrent/actor/utils/pool.rb +1 -1
- data/lib/concurrent/agent.rb +1 -22
- data/lib/concurrent/async.rb +1 -79
- data/lib/concurrent/atomic.rb +1 -1
- data/lib/concurrent/atomic/thread_local_var.rb +71 -24
- data/lib/concurrent/atomics.rb +0 -1
- data/lib/concurrent/configuration.rb +11 -5
- data/lib/concurrent/dataflow.rb +1 -30
- data/lib/concurrent/dereferenceable.rb +9 -2
- data/lib/concurrent/executor/indirect_immediate_executor.rb +46 -0
- data/lib/concurrent/executor/java_thread_pool_executor.rb +2 -4
- data/lib/concurrent/executor/ruby_thread_pool_executor.rb +24 -22
- data/lib/concurrent/executor/thread_pool_executor.rb +2 -0
- data/lib/concurrent/executor/timer_set.rb +7 -8
- data/lib/concurrent/executors.rb +1 -0
- data/lib/concurrent/future.rb +7 -29
- data/lib/concurrent/ivar.rb +9 -0
- data/lib/concurrent/logging.rb +3 -0
- data/lib/concurrent/mvar.rb +26 -9
- data/lib/concurrent/observable.rb +33 -0
- data/lib/concurrent/promise.rb +59 -1
- data/lib/concurrent/scheduled_task.rb +1 -0
- data/lib/concurrent/timer_task.rb +18 -18
- data/lib/concurrent/tvar.rb +2 -0
- data/lib/concurrent/version.rb +1 -1
- metadata +21 -4
@@ -10,7 +10,7 @@ module Concurrent
|
|
10
10
|
# intervals. The thread that performs the task sleeps for the given interval then
|
11
11
|
# wakes up and performs the task. Lather, rinse, repeat... This pattern causes two
|
12
12
|
# problems. First, it is difficult to test the business logic of the task because the
|
13
|
-
# task itself is tightly coupled with the concurrency logic. Second, an exception
|
13
|
+
# task itself is tightly coupled with the concurrency logic. Second, an exception
|
14
14
|
# raised while performing the task can cause the entire thread to abend. In a
|
15
15
|
# long-running application where the task thread is intended to run for days/weeks/years
|
16
16
|
# a crashed task thread can pose a significant problem. `TimerTask` alleviates both problems.
|
@@ -23,13 +23,13 @@ module Concurrent
|
|
23
23
|
# performing logging or ancillary operations. `TimerTask` can also be configured with a
|
24
24
|
# timeout value allowing it to kill a task that runs too long.
|
25
25
|
#
|
26
|
-
# One other advantage of `TimerTask` is it forces the business logic to be completely decoupled
|
26
|
+
# One other advantage of `TimerTask` is that it forces the business logic to be completely decoupled
|
27
27
|
# from the concurrency logic. The business logic can be tested separately then passed to the
|
28
28
|
# `TimerTask` for scheduling and running.
|
29
29
|
#
|
30
30
|
# In some cases it may be necessary for a `TimerTask` to affect its own execution cycle.
|
31
|
-
# To facilitate this a reference to the
|
32
|
-
#
|
31
|
+
# To facilitate this, a reference to the TimerTask instance is passed as an argument
|
32
|
+
# to the provided block every time the task is executed.
|
33
33
|
#
|
34
34
|
# The `TimerTask` class includes the `Dereferenceable` mixin module so the result of
|
35
35
|
# the last execution is always available via the `#value` method. Derefencing options
|
@@ -39,13 +39,13 @@ module Concurrent
|
|
39
39
|
# `TimerTask` supports notification through the Ruby standard library
|
40
40
|
# {http://ruby-doc.org/stdlib-2.0/libdoc/observer/rdoc/Observable.html Observable}
|
41
41
|
# module. On execution the `TimerTask` will notify the observers
|
42
|
-
# with
|
42
|
+
# with three arguments: time of execution, the result of the block (or nil on failure),
|
43
43
|
# and any raised exceptions (or nil on success). If the timeout interval is exceeded
|
44
44
|
# the observer will receive a `Concurrent::TimeoutError` object as the third argument.
|
45
45
|
#
|
46
46
|
# @example Basic usage
|
47
47
|
# task = Concurrent::TimerTask.new{ puts 'Boom!' }
|
48
|
-
# task.
|
48
|
+
# task.execute
|
49
49
|
#
|
50
50
|
# task.execution_interval #=> 60 (default)
|
51
51
|
# task.timeout_interval #=> 30 (default)
|
@@ -53,7 +53,7 @@ module Concurrent
|
|
53
53
|
# # wait 60 seconds...
|
54
54
|
# #=> 'Boom!'
|
55
55
|
#
|
56
|
-
# task.
|
56
|
+
# task.shutdown #=> true
|
57
57
|
#
|
58
58
|
# @example Configuring `:execution_interval` and `:timeout_interval`
|
59
59
|
# task = Concurrent::TimerTask.new(execution_interval: 5, timeout_interval: 5) do
|
@@ -65,7 +65,7 @@ module Concurrent
|
|
65
65
|
#
|
66
66
|
# @example Immediate execution with `:run_now`
|
67
67
|
# task = Concurrent::TimerTask.new(run_now: true){ puts 'Boom!' }
|
68
|
-
# task.
|
68
|
+
# task.execute
|
69
69
|
#
|
70
70
|
# #=> 'Boom!'
|
71
71
|
#
|
@@ -75,7 +75,7 @@ module Concurrent
|
|
75
75
|
# execution_interval: 5
|
76
76
|
# ){ Time.now }
|
77
77
|
#
|
78
|
-
# task.
|
78
|
+
# task.execute
|
79
79
|
# Time.now #=> 2013-11-07 18:06:50 -0500
|
80
80
|
# sleep(10)
|
81
81
|
# task.value #=> 2013-11-07 18:06:55 -0500
|
@@ -87,11 +87,11 @@ module Concurrent
|
|
87
87
|
# task.execution_interval += 1
|
88
88
|
# if task.execution_interval > 5
|
89
89
|
# puts 'Stopping...'
|
90
|
-
# task.
|
90
|
+
# task.shutdown
|
91
91
|
# end
|
92
92
|
# end
|
93
93
|
#
|
94
|
-
# timer_task.
|
94
|
+
# timer_task.execute # blocking call - this task will stop itself
|
95
95
|
# #=> Boom!
|
96
96
|
# #=> Boom! Boom!
|
97
97
|
# #=> Boom! Boom! Boom!
|
@@ -114,30 +114,30 @@ module Concurrent
|
|
114
114
|
#
|
115
115
|
# task = Concurrent::TimerTask.new(execution_interval: 1, timeout_interval: 1){ 42 }
|
116
116
|
# task.add_observer(TaskObserver.new)
|
117
|
-
# task.
|
117
|
+
# task.execute
|
118
118
|
#
|
119
119
|
# #=> (2013-10-13 19:08:58 -0400) Execution successfully returned 42
|
120
120
|
# #=> (2013-10-13 19:08:59 -0400) Execution successfully returned 42
|
121
121
|
# #=> (2013-10-13 19:09:00 -0400) Execution successfully returned 42
|
122
|
-
# task.
|
122
|
+
# task.shutdown
|
123
123
|
#
|
124
124
|
# task = Concurrent::TimerTask.new(execution_interval: 1, timeout_interval: 1){ sleep }
|
125
125
|
# task.add_observer(TaskObserver.new)
|
126
|
-
# task.
|
126
|
+
# task.execute
|
127
127
|
#
|
128
128
|
# #=> (2013-10-13 19:07:25 -0400) Execution timed out
|
129
129
|
# #=> (2013-10-13 19:07:27 -0400) Execution timed out
|
130
130
|
# #=> (2013-10-13 19:07:29 -0400) Execution timed out
|
131
|
-
# task.
|
131
|
+
# task.shutdown
|
132
132
|
#
|
133
133
|
# task = Concurrent::TimerTask.new(execution_interval: 1){ raise StandardError }
|
134
134
|
# task.add_observer(TaskObserver.new)
|
135
|
-
# task.
|
135
|
+
# task.execute
|
136
136
|
#
|
137
137
|
# #=> (2013-10-13 19:09:37 -0400) Execution failed with error StandardError
|
138
138
|
# #=> (2013-10-13 19:09:38 -0400) Execution failed with error StandardError
|
139
139
|
# #=> (2013-10-13 19:09:39 -0400) Execution failed with error StandardError
|
140
|
-
# task.
|
140
|
+
# task.shutdown
|
141
141
|
#
|
142
142
|
# @see http://ruby-doc.org/stdlib-2.0/libdoc/observer/rdoc/Observable.html
|
143
143
|
# @see http://docs.oracle.com/javase/7/docs/api/java/util/TimerTask.html
|
@@ -316,7 +316,7 @@ module Concurrent
|
|
316
316
|
# @!visibility private
|
317
317
|
def execute_task(completion)
|
318
318
|
return unless @running.true?
|
319
|
-
Concurrent::timer(
|
319
|
+
Concurrent::timer(execution_interval, completion, &method(:timeout_task))
|
320
320
|
success, value, reason = @executor.execute(self)
|
321
321
|
if completion.try?
|
322
322
|
self.value = value
|
data/lib/concurrent/tvar.rb
CHANGED
data/lib/concurrent/version.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: concurrent-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jerry D'Antonio
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
12
|
-
dependencies:
|
11
|
+
date: 2014-12-05 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: ref
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.0.5
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.0.5
|
13
27
|
description: |2
|
14
28
|
Modern concurrency tools including agents, futures, promises, thread pools, actors, supervisors, and more.
|
15
29
|
Inspired by Erlang, Clojure, Go, JavaScript, actors, and classic concurrency patterns.
|
@@ -19,7 +33,9 @@ extensions: []
|
|
19
33
|
extra_rdoc_files:
|
20
34
|
- README.md
|
21
35
|
- LICENSE.txt
|
36
|
+
- CHANGELOG.md
|
22
37
|
files:
|
38
|
+
- CHANGELOG.md
|
23
39
|
- LICENSE.txt
|
24
40
|
- README.md
|
25
41
|
- lib/concurrent.rb
|
@@ -94,6 +110,7 @@ files:
|
|
94
110
|
- lib/concurrent/executor/executor.rb
|
95
111
|
- lib/concurrent/executor/fixed_thread_pool.rb
|
96
112
|
- lib/concurrent/executor/immediate_executor.rb
|
113
|
+
- lib/concurrent/executor/indirect_immediate_executor.rb
|
97
114
|
- lib/concurrent/executor/java_cached_thread_pool.rb
|
98
115
|
- lib/concurrent/executor/java_fixed_thread_pool.rb
|
99
116
|
- lib/concurrent/executor/java_single_thread_executor.rb
|
@@ -150,7 +167,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
150
167
|
version: '0'
|
151
168
|
requirements: []
|
152
169
|
rubyforge_project:
|
153
|
-
rubygems_version: 2.
|
170
|
+
rubygems_version: 2.4.4
|
154
171
|
signing_key:
|
155
172
|
specification_version: 4
|
156
173
|
summary: Modern concurrency tools for Ruby. Inspired by Erlang, Clojure, Scala, Haskell,
|