concurrent-ruby 0.8.0.pre2-java → 0.9.0-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +114 -3
- data/README.md +111 -55
- data/lib/concurrent.rb +90 -14
- data/lib/concurrent/async.rb +143 -51
- data/lib/concurrent/atom.rb +131 -0
- data/lib/concurrent/atomic/atomic_boolean.rb +57 -107
- data/lib/concurrent/atomic/atomic_fixnum.rb +73 -101
- data/lib/concurrent/atomic/atomic_reference.rb +49 -0
- data/lib/concurrent/atomic/condition.rb +23 -12
- data/lib/concurrent/atomic/count_down_latch.rb +23 -21
- data/lib/concurrent/atomic/cyclic_barrier.rb +47 -47
- data/lib/concurrent/atomic/event.rb +33 -42
- data/lib/concurrent/atomic/read_write_lock.rb +252 -0
- data/lib/concurrent/atomic/semaphore.rb +64 -89
- data/lib/concurrent/atomic/thread_local_var.rb +130 -58
- data/lib/concurrent/atomic/thread_local_var/weak_key_map.rb +236 -0
- data/lib/concurrent/atomic_reference/direct_update.rb +34 -3
- data/lib/concurrent/atomic_reference/jruby.rb +6 -3
- data/lib/concurrent/atomic_reference/mutex_atomic.rb +17 -39
- data/lib/concurrent/atomic_reference/numeric_cas_wrapper.rb +3 -0
- data/lib/concurrent/atomic_reference/rbx.rb +4 -1
- data/lib/concurrent/atomic_reference/ruby.rb +6 -3
- data/lib/concurrent/atomics.rb +74 -4
- data/lib/concurrent/collection/copy_on_notify_observer_set.rb +115 -0
- data/lib/concurrent/collection/copy_on_write_observer_set.rb +119 -0
- data/lib/concurrent/collection/priority_queue.rb +300 -245
- data/lib/concurrent/concern/deprecation.rb +34 -0
- data/lib/concurrent/concern/dereferenceable.rb +88 -0
- data/lib/concurrent/concern/logging.rb +27 -0
- data/lib/concurrent/concern/obligation.rb +228 -0
- data/lib/concurrent/concern/observable.rb +85 -0
- data/lib/concurrent/configuration.rb +234 -109
- data/lib/concurrent/dataflow.rb +2 -3
- data/lib/concurrent/delay.rb +141 -50
- data/lib/concurrent/edge.rb +30 -0
- data/lib/concurrent/errors.rb +19 -7
- data/lib/concurrent/exchanger.rb +25 -1
- data/lib/concurrent/executor/cached_thread_pool.rb +51 -33
- data/lib/concurrent/executor/executor.rb +46 -299
- data/lib/concurrent/executor/executor_service.rb +521 -0
- data/lib/concurrent/executor/fixed_thread_pool.rb +196 -23
- data/lib/concurrent/executor/immediate_executor.rb +9 -9
- data/lib/concurrent/executor/indirect_immediate_executor.rb +4 -3
- data/lib/concurrent/executor/java_single_thread_executor.rb +17 -16
- data/lib/concurrent/executor/java_thread_pool_executor.rb +55 -102
- data/lib/concurrent/executor/ruby_single_thread_executor.rb +14 -16
- data/lib/concurrent/executor/ruby_thread_pool_executor.rb +250 -166
- data/lib/concurrent/executor/safe_task_executor.rb +5 -4
- data/lib/concurrent/executor/serialized_execution.rb +22 -18
- data/lib/concurrent/executor/{per_thread_executor.rb → simple_executor_service.rb} +29 -20
- data/lib/concurrent/executor/single_thread_executor.rb +32 -21
- data/lib/concurrent/executor/thread_pool_executor.rb +73 -60
- data/lib/concurrent/executor/timer_set.rb +96 -84
- data/lib/concurrent/executors.rb +1 -1
- data/lib/concurrent/future.rb +71 -38
- data/lib/concurrent/immutable_struct.rb +89 -0
- data/lib/concurrent/ivar.rb +152 -60
- data/lib/concurrent/lazy_register.rb +40 -20
- data/lib/concurrent/maybe.rb +226 -0
- data/lib/concurrent/mutable_struct.rb +227 -0
- data/lib/concurrent/mvar.rb +44 -43
- data/lib/concurrent/promise.rb +229 -136
- data/lib/concurrent/scheduled_task.rb +341 -43
- data/lib/concurrent/settable_struct.rb +127 -0
- data/lib/concurrent/synchronization.rb +17 -0
- data/lib/concurrent/synchronization/abstract_object.rb +163 -0
- data/lib/concurrent/synchronization/abstract_struct.rb +158 -0
- data/lib/concurrent/synchronization/condition.rb +53 -0
- data/lib/concurrent/synchronization/java_object.rb +34 -0
- data/lib/concurrent/synchronization/lock.rb +32 -0
- data/lib/concurrent/synchronization/monitor_object.rb +26 -0
- data/lib/concurrent/synchronization/mutex_object.rb +43 -0
- data/lib/concurrent/synchronization/object.rb +78 -0
- data/lib/concurrent/synchronization/rbx_object.rb +75 -0
- data/lib/concurrent/timer_task.rb +92 -103
- data/lib/concurrent/tvar.rb +42 -38
- data/lib/concurrent/utilities.rb +3 -1
- data/lib/concurrent/utility/at_exit.rb +97 -0
- data/lib/concurrent/utility/engine.rb +44 -0
- data/lib/concurrent/utility/monotonic_time.rb +59 -0
- data/lib/concurrent/utility/native_extension_loader.rb +56 -0
- data/lib/concurrent/utility/processor_counter.rb +156 -0
- data/lib/concurrent/utility/timeout.rb +18 -14
- data/lib/concurrent/utility/timer.rb +11 -6
- data/lib/concurrent/version.rb +2 -1
- data/lib/concurrent_ruby.rb +1 -0
- data/lib/concurrent_ruby_ext.jar +0 -0
- metadata +46 -66
- data/lib/concurrent/actor.rb +0 -103
- data/lib/concurrent/actor/behaviour.rb +0 -70
- data/lib/concurrent/actor/behaviour/abstract.rb +0 -48
- data/lib/concurrent/actor/behaviour/awaits.rb +0 -21
- data/lib/concurrent/actor/behaviour/buffer.rb +0 -54
- data/lib/concurrent/actor/behaviour/errors_on_unknown_message.rb +0 -12
- data/lib/concurrent/actor/behaviour/executes_context.rb +0 -18
- data/lib/concurrent/actor/behaviour/linking.rb +0 -45
- data/lib/concurrent/actor/behaviour/pausing.rb +0 -77
- data/lib/concurrent/actor/behaviour/removes_child.rb +0 -16
- data/lib/concurrent/actor/behaviour/sets_results.rb +0 -36
- data/lib/concurrent/actor/behaviour/supervised.rb +0 -59
- data/lib/concurrent/actor/behaviour/supervising.rb +0 -34
- data/lib/concurrent/actor/behaviour/terminates_children.rb +0 -13
- data/lib/concurrent/actor/behaviour/termination.rb +0 -54
- data/lib/concurrent/actor/context.rb +0 -154
- data/lib/concurrent/actor/core.rb +0 -217
- data/lib/concurrent/actor/default_dead_letter_handler.rb +0 -9
- data/lib/concurrent/actor/envelope.rb +0 -41
- data/lib/concurrent/actor/errors.rb +0 -27
- data/lib/concurrent/actor/internal_delegations.rb +0 -49
- data/lib/concurrent/actor/public_delegations.rb +0 -40
- data/lib/concurrent/actor/reference.rb +0 -81
- data/lib/concurrent/actor/root.rb +0 -37
- data/lib/concurrent/actor/type_check.rb +0 -48
- data/lib/concurrent/actor/utils.rb +0 -10
- data/lib/concurrent/actor/utils/ad_hoc.rb +0 -21
- data/lib/concurrent/actor/utils/balancer.rb +0 -42
- data/lib/concurrent/actor/utils/broadcast.rb +0 -52
- data/lib/concurrent/actor/utils/pool.rb +0 -59
- data/lib/concurrent/actress.rb +0 -3
- data/lib/concurrent/agent.rb +0 -209
- data/lib/concurrent/atomic.rb +0 -92
- data/lib/concurrent/atomic/copy_on_notify_observer_set.rb +0 -118
- data/lib/concurrent/atomic/copy_on_write_observer_set.rb +0 -117
- data/lib/concurrent/atomic/synchronization.rb +0 -51
- data/lib/concurrent/channel/buffered_channel.rb +0 -85
- data/lib/concurrent/channel/channel.rb +0 -41
- data/lib/concurrent/channel/unbuffered_channel.rb +0 -35
- data/lib/concurrent/channel/waitable_list.rb +0 -40
- data/lib/concurrent/channels.rb +0 -5
- data/lib/concurrent/collection/blocking_ring_buffer.rb +0 -71
- data/lib/concurrent/collection/ring_buffer.rb +0 -59
- data/lib/concurrent/collections.rb +0 -3
- data/lib/concurrent/dereferenceable.rb +0 -108
- data/lib/concurrent/executor/java_cached_thread_pool.rb +0 -32
- data/lib/concurrent/executor/java_fixed_thread_pool.rb +0 -31
- data/lib/concurrent/executor/ruby_cached_thread_pool.rb +0 -29
- data/lib/concurrent/executor/ruby_fixed_thread_pool.rb +0 -32
- data/lib/concurrent/executor/ruby_thread_pool_worker.rb +0 -73
- data/lib/concurrent/logging.rb +0 -20
- data/lib/concurrent/obligation.rb +0 -171
- data/lib/concurrent/observable.rb +0 -73
- data/lib/concurrent/options_parser.rb +0 -48
- data/lib/concurrent/utility/processor_count.rb +0 -152
- data/lib/extension_helper.rb +0 -37
@@ -2,34 +2,38 @@ require 'rbconfig'
|
|
2
2
|
require 'thread'
|
3
3
|
|
4
4
|
require 'concurrent/errors'
|
5
|
+
require 'concurrent/concern/deprecation'
|
5
6
|
|
6
7
|
module Concurrent
|
8
|
+
extend Concern::Deprecation
|
7
9
|
|
8
|
-
# Wait the given number of seconds for the block operation to complete.
|
10
|
+
# [DEPRECATED] Wait the given number of seconds for the block operation to complete.
|
11
|
+
# Intended to be a simpler and more reliable replacement to the Ruby
|
12
|
+
# standard library `Timeout::timeout` method. It does not kill the task
|
13
|
+
# so it finishes anyway. Advantage is that it cannot cause any ugly errors by
|
14
|
+
# killing threads.
|
9
15
|
#
|
10
16
|
# @param [Integer] seconds The number of seconds to wait
|
11
|
-
#
|
12
17
|
# @return [Object] The result of the block operation
|
13
18
|
#
|
14
19
|
# @raise [Concurrent::TimeoutError] when the block operation does not complete
|
15
20
|
# in the allotted number of seconds.
|
16
21
|
#
|
17
|
-
# @
|
18
|
-
#
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
success = thread.join(seconds)
|
22
|
+
# @see http://ruby-doc.org/stdlib-2.2.0/libdoc/timeout/rdoc/Timeout.html Ruby Timeout::timeout
|
23
|
+
#
|
24
|
+
# @!macro monotonic_clock_warning
|
25
|
+
#
|
26
|
+
# @deprecated timeout is deprecated and will be removed
|
27
|
+
def timeout(seconds, &block)
|
28
|
+
deprecated 'timeout is deprecated and will be removed'
|
25
29
|
|
26
|
-
|
27
|
-
|
30
|
+
future = Future.execute(&block)
|
31
|
+
future.wait(seconds)
|
32
|
+
if future.complete?
|
33
|
+
future.value!
|
28
34
|
else
|
29
35
|
raise TimeoutError
|
30
36
|
end
|
31
|
-
ensure
|
32
|
-
Thread.kill(thread) unless thread.nil?
|
33
37
|
end
|
34
38
|
module_function :timeout
|
35
39
|
end
|
@@ -1,21 +1,26 @@
|
|
1
1
|
require 'concurrent/configuration'
|
2
|
-
require '
|
2
|
+
require 'concurrent/concern/deprecation'
|
3
3
|
|
4
4
|
module Concurrent
|
5
|
+
extend Concern::Deprecation
|
5
6
|
|
6
|
-
# Perform the given operation asynchronously after
|
7
|
+
# [DEPRECATED] Perform the given operation asynchronously after
|
8
|
+
# the given number of seconds.
|
7
9
|
#
|
8
10
|
# @param [Fixnum] seconds the interval in seconds to wait before executing the task
|
9
11
|
#
|
10
12
|
# @yield the task to execute
|
11
13
|
#
|
12
|
-
# @return [
|
14
|
+
# @return [Concurrent::ScheduledTask] IVar representing the task
|
15
|
+
#
|
16
|
+
# @see Concurrent::ScheduledTask
|
17
|
+
#
|
18
|
+
# @deprecated use `ScheduledTask` instead
|
13
19
|
def timer(seconds, *args, &block)
|
20
|
+
deprecated_method 'Concurrent.timer', 'ScheduledTask'
|
14
21
|
raise ArgumentError.new('no block given') unless block_given?
|
15
22
|
raise ArgumentError.new('interval must be greater than or equal to zero') if seconds < 0
|
16
|
-
|
17
|
-
Concurrent.configuration.global_timer_set.post(seconds, *args, &block)
|
18
|
-
true
|
23
|
+
Concurrent.global_timer_set.post(seconds, *args, &block)
|
19
24
|
end
|
20
25
|
module_function :timer
|
21
26
|
end
|
data/lib/concurrent/version.rb
CHANGED
data/lib/concurrent_ruby.rb
CHANGED
data/lib/concurrent_ruby_ext.jar
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,19 +1,22 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: concurrent-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Jerry D'Antonio
|
8
|
+
- The Ruby Concurrency Team
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2015-
|
12
|
+
date: 2015-07-10 00:00:00.000000000 Z
|
12
13
|
dependencies: []
|
13
|
-
description: |
|
14
|
-
|
15
|
-
|
16
|
-
email:
|
14
|
+
description: |
|
15
|
+
Modern concurrency tools including agents, futures, promises, thread pools, actors, supervisors, and more.
|
16
|
+
Inspired by Erlang, Clojure, Go, JavaScript, actors, and classic concurrency patterns.
|
17
|
+
email:
|
18
|
+
- jerry.dantonio@gmail.com
|
19
|
+
- concurrent-ruby@googlegroups.com
|
17
20
|
executables: []
|
18
21
|
extensions: []
|
19
22
|
extra_rdoc_files:
|
@@ -25,51 +28,19 @@ files:
|
|
25
28
|
- LICENSE.txt
|
26
29
|
- README.md
|
27
30
|
- lib/concurrent.rb
|
28
|
-
- lib/concurrent/actor.rb
|
29
|
-
- lib/concurrent/actor/behaviour.rb
|
30
|
-
- lib/concurrent/actor/behaviour/abstract.rb
|
31
|
-
- lib/concurrent/actor/behaviour/awaits.rb
|
32
|
-
- lib/concurrent/actor/behaviour/buffer.rb
|
33
|
-
- lib/concurrent/actor/behaviour/errors_on_unknown_message.rb
|
34
|
-
- lib/concurrent/actor/behaviour/executes_context.rb
|
35
|
-
- lib/concurrent/actor/behaviour/linking.rb
|
36
|
-
- lib/concurrent/actor/behaviour/pausing.rb
|
37
|
-
- lib/concurrent/actor/behaviour/removes_child.rb
|
38
|
-
- lib/concurrent/actor/behaviour/sets_results.rb
|
39
|
-
- lib/concurrent/actor/behaviour/supervised.rb
|
40
|
-
- lib/concurrent/actor/behaviour/supervising.rb
|
41
|
-
- lib/concurrent/actor/behaviour/terminates_children.rb
|
42
|
-
- lib/concurrent/actor/behaviour/termination.rb
|
43
|
-
- lib/concurrent/actor/context.rb
|
44
|
-
- lib/concurrent/actor/core.rb
|
45
|
-
- lib/concurrent/actor/default_dead_letter_handler.rb
|
46
|
-
- lib/concurrent/actor/envelope.rb
|
47
|
-
- lib/concurrent/actor/errors.rb
|
48
|
-
- lib/concurrent/actor/internal_delegations.rb
|
49
|
-
- lib/concurrent/actor/public_delegations.rb
|
50
|
-
- lib/concurrent/actor/reference.rb
|
51
|
-
- lib/concurrent/actor/root.rb
|
52
|
-
- lib/concurrent/actor/type_check.rb
|
53
|
-
- lib/concurrent/actor/utils.rb
|
54
|
-
- lib/concurrent/actor/utils/ad_hoc.rb
|
55
|
-
- lib/concurrent/actor/utils/balancer.rb
|
56
|
-
- lib/concurrent/actor/utils/broadcast.rb
|
57
|
-
- lib/concurrent/actor/utils/pool.rb
|
58
|
-
- lib/concurrent/actress.rb
|
59
|
-
- lib/concurrent/agent.rb
|
60
31
|
- lib/concurrent/async.rb
|
61
|
-
- lib/concurrent/
|
32
|
+
- lib/concurrent/atom.rb
|
62
33
|
- lib/concurrent/atomic/atomic_boolean.rb
|
63
34
|
- lib/concurrent/atomic/atomic_fixnum.rb
|
35
|
+
- lib/concurrent/atomic/atomic_reference.rb
|
64
36
|
- lib/concurrent/atomic/condition.rb
|
65
|
-
- lib/concurrent/atomic/copy_on_notify_observer_set.rb
|
66
|
-
- lib/concurrent/atomic/copy_on_write_observer_set.rb
|
67
37
|
- lib/concurrent/atomic/count_down_latch.rb
|
68
38
|
- lib/concurrent/atomic/cyclic_barrier.rb
|
69
39
|
- lib/concurrent/atomic/event.rb
|
40
|
+
- lib/concurrent/atomic/read_write_lock.rb
|
70
41
|
- lib/concurrent/atomic/semaphore.rb
|
71
|
-
- lib/concurrent/atomic/synchronization.rb
|
72
42
|
- lib/concurrent/atomic/thread_local_var.rb
|
43
|
+
- lib/concurrent/atomic/thread_local_var/weak_key_map.rb
|
73
44
|
- lib/concurrent/atomic_reference/concurrent_update_error.rb
|
74
45
|
- lib/concurrent/atomic_reference/direct_update.rb
|
75
46
|
- lib/concurrent/atomic_reference/jruby.rb
|
@@ -78,62 +49,70 @@ files:
|
|
78
49
|
- lib/concurrent/atomic_reference/rbx.rb
|
79
50
|
- lib/concurrent/atomic_reference/ruby.rb
|
80
51
|
- lib/concurrent/atomics.rb
|
81
|
-
- lib/concurrent/
|
82
|
-
- lib/concurrent/
|
83
|
-
- lib/concurrent/channel/unbuffered_channel.rb
|
84
|
-
- lib/concurrent/channel/waitable_list.rb
|
85
|
-
- lib/concurrent/channels.rb
|
86
|
-
- lib/concurrent/collection/blocking_ring_buffer.rb
|
52
|
+
- lib/concurrent/collection/copy_on_notify_observer_set.rb
|
53
|
+
- lib/concurrent/collection/copy_on_write_observer_set.rb
|
87
54
|
- lib/concurrent/collection/priority_queue.rb
|
88
|
-
- lib/concurrent/
|
89
|
-
- lib/concurrent/
|
55
|
+
- lib/concurrent/concern/deprecation.rb
|
56
|
+
- lib/concurrent/concern/dereferenceable.rb
|
57
|
+
- lib/concurrent/concern/logging.rb
|
58
|
+
- lib/concurrent/concern/obligation.rb
|
59
|
+
- lib/concurrent/concern/observable.rb
|
90
60
|
- lib/concurrent/configuration.rb
|
91
61
|
- lib/concurrent/dataflow.rb
|
92
62
|
- lib/concurrent/delay.rb
|
93
|
-
- lib/concurrent/
|
63
|
+
- lib/concurrent/edge.rb
|
94
64
|
- lib/concurrent/errors.rb
|
95
65
|
- lib/concurrent/exchanger.rb
|
96
66
|
- lib/concurrent/executor/cached_thread_pool.rb
|
97
67
|
- lib/concurrent/executor/executor.rb
|
68
|
+
- lib/concurrent/executor/executor_service.rb
|
98
69
|
- lib/concurrent/executor/fixed_thread_pool.rb
|
99
70
|
- lib/concurrent/executor/immediate_executor.rb
|
100
71
|
- lib/concurrent/executor/indirect_immediate_executor.rb
|
101
|
-
- lib/concurrent/executor/java_cached_thread_pool.rb
|
102
|
-
- lib/concurrent/executor/java_fixed_thread_pool.rb
|
103
72
|
- lib/concurrent/executor/java_single_thread_executor.rb
|
104
73
|
- lib/concurrent/executor/java_thread_pool_executor.rb
|
105
|
-
- lib/concurrent/executor/per_thread_executor.rb
|
106
|
-
- lib/concurrent/executor/ruby_cached_thread_pool.rb
|
107
|
-
- lib/concurrent/executor/ruby_fixed_thread_pool.rb
|
108
74
|
- lib/concurrent/executor/ruby_single_thread_executor.rb
|
109
75
|
- lib/concurrent/executor/ruby_thread_pool_executor.rb
|
110
|
-
- lib/concurrent/executor/ruby_thread_pool_worker.rb
|
111
76
|
- lib/concurrent/executor/safe_task_executor.rb
|
112
77
|
- lib/concurrent/executor/serialized_execution.rb
|
78
|
+
- lib/concurrent/executor/simple_executor_service.rb
|
113
79
|
- lib/concurrent/executor/single_thread_executor.rb
|
114
80
|
- lib/concurrent/executor/thread_pool_executor.rb
|
115
81
|
- lib/concurrent/executor/timer_set.rb
|
116
82
|
- lib/concurrent/executors.rb
|
117
83
|
- lib/concurrent/future.rb
|
84
|
+
- lib/concurrent/immutable_struct.rb
|
118
85
|
- lib/concurrent/ivar.rb
|
119
86
|
- lib/concurrent/lazy_register.rb
|
120
|
-
- lib/concurrent/
|
87
|
+
- lib/concurrent/maybe.rb
|
88
|
+
- lib/concurrent/mutable_struct.rb
|
121
89
|
- lib/concurrent/mvar.rb
|
122
|
-
- lib/concurrent/obligation.rb
|
123
|
-
- lib/concurrent/observable.rb
|
124
|
-
- lib/concurrent/options_parser.rb
|
125
90
|
- lib/concurrent/promise.rb
|
126
91
|
- lib/concurrent/scheduled_task.rb
|
92
|
+
- lib/concurrent/settable_struct.rb
|
93
|
+
- lib/concurrent/synchronization.rb
|
94
|
+
- lib/concurrent/synchronization/abstract_object.rb
|
95
|
+
- lib/concurrent/synchronization/abstract_struct.rb
|
96
|
+
- lib/concurrent/synchronization/condition.rb
|
97
|
+
- lib/concurrent/synchronization/java_object.rb
|
98
|
+
- lib/concurrent/synchronization/lock.rb
|
99
|
+
- lib/concurrent/synchronization/monitor_object.rb
|
100
|
+
- lib/concurrent/synchronization/mutex_object.rb
|
101
|
+
- lib/concurrent/synchronization/object.rb
|
102
|
+
- lib/concurrent/synchronization/rbx_object.rb
|
127
103
|
- lib/concurrent/timer_task.rb
|
128
104
|
- lib/concurrent/tvar.rb
|
129
105
|
- lib/concurrent/utilities.rb
|
130
|
-
- lib/concurrent/utility/
|
106
|
+
- lib/concurrent/utility/at_exit.rb
|
107
|
+
- lib/concurrent/utility/engine.rb
|
108
|
+
- lib/concurrent/utility/monotonic_time.rb
|
109
|
+
- lib/concurrent/utility/native_extension_loader.rb
|
110
|
+
- lib/concurrent/utility/processor_counter.rb
|
131
111
|
- lib/concurrent/utility/timeout.rb
|
132
112
|
- lib/concurrent/utility/timer.rb
|
133
113
|
- lib/concurrent/version.rb
|
134
114
|
- lib/concurrent_ruby.rb
|
135
115
|
- lib/concurrent_ruby_ext.jar
|
136
|
-
- lib/extension_helper.rb
|
137
116
|
homepage: http://www.concurrent-ruby.com
|
138
117
|
licenses:
|
139
118
|
- MIT
|
@@ -144,14 +123,14 @@ require_paths:
|
|
144
123
|
- lib
|
145
124
|
required_ruby_version: !ruby/object:Gem::Requirement
|
146
125
|
requirements:
|
147
|
-
- -
|
126
|
+
- - '>='
|
148
127
|
- !ruby/object:Gem::Version
|
149
128
|
version: 1.9.3
|
150
129
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
151
130
|
requirements:
|
152
|
-
- -
|
131
|
+
- - '>='
|
153
132
|
- !ruby/object:Gem::Version
|
154
|
-
version:
|
133
|
+
version: '0'
|
155
134
|
requirements: []
|
156
135
|
rubyforge_project:
|
157
136
|
rubygems_version: 2.4.5
|
@@ -159,3 +138,4 @@ signing_key:
|
|
159
138
|
specification_version: 4
|
160
139
|
summary: Modern concurrency tools for Ruby. Inspired by Erlang, Clojure, Scala, Haskell, F#, C#, Java, and classic concurrency patterns.
|
161
140
|
test_files: []
|
141
|
+
has_rdoc:
|
data/lib/concurrent/actor.rb
DELETED
@@ -1,103 +0,0 @@
|
|
1
|
-
require 'concurrent/configuration'
|
2
|
-
require 'concurrent/executor/serialized_execution'
|
3
|
-
require 'concurrent/ivar'
|
4
|
-
require 'concurrent/logging'
|
5
|
-
require 'concurrent/atomic/synchronization'
|
6
|
-
|
7
|
-
module Concurrent
|
8
|
-
# TODO https://github.com/celluloid/celluloid/wiki/Supervision-Groups ?
|
9
|
-
# TODO Remote actors using DRb
|
10
|
-
# TODO IO interoperation
|
11
|
-
# TODO un/become
|
12
|
-
|
13
|
-
# TODO doc
|
14
|
-
# - what happens if I try to supervise using a normal Context?
|
15
|
-
# - how to change behaviours
|
16
|
-
# - how to implement custom restarting?
|
17
|
-
# - pool for io operations using different executor
|
18
|
-
# - document guaranteed ordering
|
19
|
-
|
20
|
-
# {include:file:doc/actor/main.md}
|
21
|
-
module Actor
|
22
|
-
|
23
|
-
require 'concurrent/actor/type_check'
|
24
|
-
require 'concurrent/actor/errors'
|
25
|
-
require 'concurrent/actor/public_delegations'
|
26
|
-
require 'concurrent/actor/internal_delegations'
|
27
|
-
require 'concurrent/actor/envelope'
|
28
|
-
require 'concurrent/actor/reference'
|
29
|
-
require 'concurrent/actor/core'
|
30
|
-
require 'concurrent/actor/behaviour'
|
31
|
-
require 'concurrent/actor/context'
|
32
|
-
|
33
|
-
require 'concurrent/actor/default_dead_letter_handler'
|
34
|
-
require 'concurrent/actor/root'
|
35
|
-
require 'concurrent/actor/utils'
|
36
|
-
|
37
|
-
# @return [Reference, nil] current executing actor if any
|
38
|
-
def self.current
|
39
|
-
Thread.current[:__current_actor__]
|
40
|
-
end
|
41
|
-
|
42
|
-
@root = Delay.new do
|
43
|
-
Core.new(parent: nil, name: '/', class: Root, initialized: ivar = IVar.new).reference.tap do
|
44
|
-
ivar.no_error!
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
# A root actor, a default parent of all actors spawned outside an actor
|
49
|
-
def self.root
|
50
|
-
@root.value!
|
51
|
-
end
|
52
|
-
|
53
|
-
# Spawns a new actor.
|
54
|
-
#
|
55
|
-
# @example simple
|
56
|
-
# Actor.spawn(AdHoc, :ping1) { -> message { message } }
|
57
|
-
#
|
58
|
-
# @example complex
|
59
|
-
# Actor.spawn name: :ping3,
|
60
|
-
# class: AdHoc,
|
61
|
-
# args: [1]
|
62
|
-
# executor: Concurrent.configuration.global_task_pool do |add|
|
63
|
-
# lambda { |number| number + add }
|
64
|
-
# end
|
65
|
-
#
|
66
|
-
# @param block for context_class instantiation
|
67
|
-
# @param args see {.spawn_optionify}
|
68
|
-
# @return [Reference] never the actual actor
|
69
|
-
def self.spawn(*args, &block)
|
70
|
-
if Actor.current
|
71
|
-
Core.new(spawn_optionify(*args).merge(parent: Actor.current), &block).reference
|
72
|
-
else
|
73
|
-
root.ask([:spawn, spawn_optionify(*args), block]).value!
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
# as {.spawn} but it'll raise when Actor not initialized properly
|
78
|
-
def self.spawn!(*args, &block)
|
79
|
-
spawn(spawn_optionify(*args).merge(initialized: ivar = IVar.new), &block).tap { ivar.no_error! }
|
80
|
-
end
|
81
|
-
|
82
|
-
# @overload spawn_optionify(context_class, name, *args)
|
83
|
-
# @param [AbstractContext] context_class to be spawned
|
84
|
-
# @param [String, Symbol] name of the instance, it's used to generate the {Core#path} of the actor
|
85
|
-
# @param args for context_class instantiation
|
86
|
-
# @overload spawn_optionify(opts)
|
87
|
-
# see {Core#initialize} opts
|
88
|
-
def self.spawn_optionify(*args)
|
89
|
-
if args.size == 1 && args.first.is_a?(Hash)
|
90
|
-
args.first
|
91
|
-
else
|
92
|
-
{ class: args[0],
|
93
|
-
name: args[1],
|
94
|
-
args: args[2..-1] }
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
# call this to disable experimental warning
|
99
|
-
def self.i_know_it_is_experimental!
|
100
|
-
warn 'Method Actor.i_know_it_is_experimental! is deprecated. The Actors are no longer experimental.'
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
@@ -1,70 +0,0 @@
|
|
1
|
-
module Concurrent
|
2
|
-
module Actor
|
3
|
-
|
4
|
-
# Actors have modular architecture, which is achieved by combining a light core with chain of
|
5
|
-
# behaviours. Each message or internal event propagates through the chain allowing the
|
6
|
-
# behaviours react based on their responsibility. listing few as an example:
|
7
|
-
#
|
8
|
-
# - {Behaviour::Linking}:
|
9
|
-
#
|
10
|
-
# > {include:Actor::Behaviour::Linking}
|
11
|
-
#
|
12
|
-
# - {Behaviour::Awaits}:
|
13
|
-
#
|
14
|
-
# > {include:Actor::Behaviour::Awaits}
|
15
|
-
#
|
16
|
-
# See {Behaviour}'s namespace fo other behaviours.
|
17
|
-
# If needed new behaviours can be added, or old one removed to get required behaviour.
|
18
|
-
module Behaviour
|
19
|
-
MESSAGE_PROCESSED = Object.new
|
20
|
-
|
21
|
-
require 'concurrent/actor/behaviour/abstract'
|
22
|
-
require 'concurrent/actor/behaviour/awaits'
|
23
|
-
require 'concurrent/actor/behaviour/buffer'
|
24
|
-
require 'concurrent/actor/behaviour/errors_on_unknown_message'
|
25
|
-
require 'concurrent/actor/behaviour/executes_context'
|
26
|
-
require 'concurrent/actor/behaviour/linking'
|
27
|
-
require 'concurrent/actor/behaviour/pausing'
|
28
|
-
require 'concurrent/actor/behaviour/removes_child'
|
29
|
-
require 'concurrent/actor/behaviour/sets_results'
|
30
|
-
require 'concurrent/actor/behaviour/supervised'
|
31
|
-
require 'concurrent/actor/behaviour/supervising'
|
32
|
-
require 'concurrent/actor/behaviour/termination'
|
33
|
-
require 'concurrent/actor/behaviour/terminates_children'
|
34
|
-
|
35
|
-
def self.basic_behaviour_definition
|
36
|
-
[*base,
|
37
|
-
*user_messages(:terminate!)]
|
38
|
-
end
|
39
|
-
|
40
|
-
def self.restarting_behaviour_definition
|
41
|
-
[*base,
|
42
|
-
*supervised,
|
43
|
-
[Behaviour::Supervising, [:reset!, :one_for_one]],
|
44
|
-
*user_messages(:pause!)]
|
45
|
-
end
|
46
|
-
|
47
|
-
def self.base
|
48
|
-
[[SetResults, [:terminate!]],
|
49
|
-
# has to be before Termination to be able to remove children form terminated actor
|
50
|
-
[RemovesChild, []],
|
51
|
-
[Termination, []],
|
52
|
-
[TerminatesChildren, []],
|
53
|
-
[Linking, []]]
|
54
|
-
end
|
55
|
-
|
56
|
-
def self.supervised
|
57
|
-
[[Supervised, []],
|
58
|
-
[Pausing, []]]
|
59
|
-
end
|
60
|
-
|
61
|
-
def self.user_messages(on_error)
|
62
|
-
[[Buffer, []],
|
63
|
-
[SetResults, [on_error]],
|
64
|
-
[Awaits, []],
|
65
|
-
[ExecutesContext, []],
|
66
|
-
[ErrorsOnUnknownMessage, []]]
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|