concurrent-ruby 1.0.5 → 1.1.0.pre1
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 +5 -5
- data/CHANGELOG.md +42 -0
- data/Gemfile +39 -0
- data/{LICENSE.txt → LICENSE.md} +2 -0
- data/README.md +203 -105
- data/Rakefile +278 -0
- data/ext/concurrent-ruby/ConcurrentRubyService.java +17 -0
- data/ext/concurrent-ruby/com/concurrent_ruby/ext/AtomicReferenceLibrary.java +175 -0
- data/ext/concurrent-ruby/com/concurrent_ruby/ext/JRubyMapBackendLibrary.java +248 -0
- data/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaAtomicBooleanLibrary.java +93 -0
- data/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaAtomicFixnumLibrary.java +113 -0
- data/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaSemaphoreLibrary.java +159 -0
- data/ext/concurrent-ruby/com/concurrent_ruby/ext/SynchronizationLibrary.java +304 -0
- data/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/ConcurrentHashMap.java +31 -0
- data/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/ConcurrentHashMapV8.java +3863 -0
- data/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/LongAdder.java +203 -0
- data/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/Striped64.java +342 -0
- data/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/nounsafe/ConcurrentHashMapV8.java +3800 -0
- data/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/nounsafe/LongAdder.java +204 -0
- data/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/nounsafe/Striped64.java +291 -0
- data/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166y/ThreadLocalRandom.java +199 -0
- data/lib/concurrent-ruby.rb +1 -0
- data/lib/concurrent.rb +24 -20
- data/lib/concurrent/agent.rb +7 -7
- data/lib/concurrent/array.rb +59 -32
- data/lib/concurrent/async.rb +4 -4
- data/lib/concurrent/atom.rb +9 -9
- data/lib/concurrent/atomic/atomic_boolean.rb +24 -20
- data/lib/concurrent/atomic/atomic_fixnum.rb +27 -23
- data/lib/concurrent/atomic/atomic_markable_reference.rb +164 -0
- data/lib/concurrent/atomic/atomic_reference.rb +176 -33
- data/lib/concurrent/atomic/count_down_latch.rb +6 -6
- data/lib/concurrent/atomic/cyclic_barrier.rb +1 -1
- data/lib/concurrent/atomic/event.rb +1 -1
- data/lib/concurrent/atomic/java_count_down_latch.rb +6 -5
- data/lib/concurrent/atomic/mutex_count_down_latch.rb +1 -0
- data/lib/concurrent/atomic/read_write_lock.rb +2 -1
- data/lib/concurrent/atomic/reentrant_read_write_lock.rb +3 -1
- data/lib/concurrent/atomic/semaphore.rb +8 -8
- data/lib/concurrent/atomic/thread_local_var.rb +7 -7
- data/lib/concurrent/atomic_reference/mutex_atomic.rb +3 -8
- data/lib/concurrent/atomic_reference/numeric_cas_wrapper.rb +1 -1
- data/lib/concurrent/atomics.rb +0 -43
- data/lib/concurrent/collection/lock_free_stack.rb +127 -0
- data/lib/concurrent/collection/map/atomic_reference_map_backend.rb +3 -3
- data/lib/concurrent/collection/map/non_concurrent_map_backend.rb +1 -2
- data/lib/concurrent/collection/non_concurrent_priority_queue.rb +29 -29
- data/lib/concurrent/concern/dereferenceable.rb +1 -1
- data/lib/concurrent/concern/logging.rb +6 -1
- data/lib/concurrent/concern/observable.rb +7 -7
- data/lib/concurrent/concurrent_ruby.jar +0 -0
- data/lib/concurrent/configuration.rb +1 -6
- data/lib/concurrent/constants.rb +1 -1
- data/lib/concurrent/dataflow.rb +2 -1
- data/lib/concurrent/delay.rb +9 -7
- data/lib/concurrent/exchanger.rb +13 -21
- data/lib/concurrent/executor/abstract_executor_service.rb +2 -2
- data/lib/concurrent/executor/cached_thread_pool.rb +1 -1
- data/lib/concurrent/executor/executor_service.rb +15 -15
- data/lib/concurrent/executor/fixed_thread_pool.rb +18 -18
- data/lib/concurrent/executor/java_thread_pool_executor.rb +10 -7
- data/lib/concurrent/executor/single_thread_executor.rb +2 -2
- data/lib/concurrent/executor/thread_pool_executor.rb +6 -6
- data/lib/concurrent/executor/timer_set.rb +1 -1
- data/lib/concurrent/future.rb +4 -1
- data/lib/concurrent/hash.rb +53 -30
- data/lib/concurrent/ivar.rb +5 -6
- data/lib/concurrent/map.rb +20 -25
- data/lib/concurrent/maybe.rb +1 -1
- data/lib/concurrent/mutable_struct.rb +15 -14
- data/lib/concurrent/mvar.rb +2 -2
- data/lib/concurrent/promise.rb +53 -21
- data/lib/concurrent/promises.rb +1938 -0
- data/lib/concurrent/re_include.rb +58 -0
- data/lib/concurrent/set.rb +66 -0
- data/lib/concurrent/settable_struct.rb +1 -0
- data/lib/concurrent/synchronization.rb +4 -5
- data/lib/concurrent/synchronization/abstract_lockable_object.rb +5 -5
- data/lib/concurrent/synchronization/abstract_struct.rb +6 -4
- data/lib/concurrent/synchronization/lockable_object.rb +6 -6
- data/lib/concurrent/synchronization/{mri_lockable_object.rb → mutex_lockable_object.rb} +19 -14
- data/lib/concurrent/synchronization/object.rb +8 -4
- data/lib/concurrent/synchronization/truffleruby_object.rb +46 -0
- data/lib/concurrent/synchronization/volatile.rb +11 -9
- data/lib/concurrent/thread_safe/util/data_structures.rb +55 -0
- data/lib/concurrent/thread_safe/util/striped64.rb +9 -4
- data/lib/concurrent/timer_task.rb +5 -2
- data/lib/concurrent/tuple.rb +1 -1
- data/lib/concurrent/tvar.rb +2 -2
- data/lib/concurrent/utility/at_exit.rb +1 -1
- data/lib/concurrent/utility/engine.rb +2 -2
- data/lib/concurrent/utility/monotonic_time.rb +3 -3
- data/lib/concurrent/utility/native_extension_loader.rb +31 -33
- data/lib/concurrent/utility/processor_counter.rb +0 -2
- data/lib/concurrent/version.rb +2 -2
- metadata +35 -21
- data/lib/concurrent/atomic_reference/concurrent_update_error.rb +0 -8
- data/lib/concurrent/atomic_reference/direct_update.rb +0 -81
- data/lib/concurrent/atomic_reference/jruby+truffle.rb +0 -2
- data/lib/concurrent/atomic_reference/jruby.rb +0 -16
- data/lib/concurrent/atomic_reference/rbx.rb +0 -22
- data/lib/concurrent/atomic_reference/ruby.rb +0 -32
- data/lib/concurrent/edge.rb +0 -26
- data/lib/concurrent/lazy_register.rb +0 -81
- data/lib/concurrent/synchronization/truffle_lockable_object.rb +0 -9
- data/lib/concurrent/synchronization/truffle_object.rb +0 -31
- data/lib/concurrent/thread_safe/util/array_hash_rbx.rb +0 -30
data/lib/concurrent/constants.rb
CHANGED
data/lib/concurrent/dataflow.rb
CHANGED
@@ -18,7 +18,8 @@ module Concurrent
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
#
|
21
|
+
# Dataflow allows you to create a task that will be scheduled when all of its data dependencies are available.
|
22
|
+
# {include:file:docs-source/dataflow.md}
|
22
23
|
#
|
23
24
|
# @param [Future] inputs zero or more `Future` operations that this dataflow depends upon
|
24
25
|
#
|
data/lib/concurrent/delay.rb
CHANGED
@@ -32,7 +32,7 @@ module Concurrent
|
|
32
32
|
#
|
33
33
|
# @!macro copy_options
|
34
34
|
#
|
35
|
-
# @!macro
|
35
|
+
# @!macro delay_note_regarding_blocking
|
36
36
|
# @note The default behavior of `Delay` is to block indefinitely when
|
37
37
|
# calling either `value` or `wait`, executing the delayed operation on
|
38
38
|
# the current thread. This makes the `timeout` value completely
|
@@ -81,13 +81,15 @@ module Concurrent
|
|
81
81
|
# this function has been optimized for performance and
|
82
82
|
# should not be modified without running new benchmarks
|
83
83
|
synchronize do
|
84
|
-
execute = @
|
84
|
+
execute = @evaluation_started = true unless @evaluation_started
|
85
85
|
if execute
|
86
86
|
begin
|
87
87
|
set_state(true, @task.call, nil)
|
88
88
|
rescue => ex
|
89
89
|
set_state(false, nil, ex)
|
90
90
|
end
|
91
|
+
elsif incomplete?
|
92
|
+
raise IllegalOperationError, 'Recursive call to #value during evaluation of the Delay'
|
91
93
|
end
|
92
94
|
end
|
93
95
|
if @do_nothing_on_deref
|
@@ -144,7 +146,7 @@ module Concurrent
|
|
144
146
|
def reconfigure(&block)
|
145
147
|
synchronize do
|
146
148
|
raise ArgumentError.new('no block given') unless block_given?
|
147
|
-
unless @
|
149
|
+
unless @evaluation_started
|
148
150
|
@task = block
|
149
151
|
true
|
150
152
|
else
|
@@ -160,9 +162,9 @@ module Concurrent
|
|
160
162
|
set_deref_options(opts)
|
161
163
|
@executor = opts[:executor]
|
162
164
|
|
163
|
-
@task
|
164
|
-
@state
|
165
|
-
@
|
165
|
+
@task = block
|
166
|
+
@state = :pending
|
167
|
+
@evaluation_started = false
|
166
168
|
end
|
167
169
|
|
168
170
|
private
|
@@ -173,7 +175,7 @@ module Concurrent
|
|
173
175
|
# should not be modified without running new benchmarks
|
174
176
|
execute = task = nil
|
175
177
|
synchronize do
|
176
|
-
execute = @
|
178
|
+
execute = @evaluation_started = true unless @evaluation_started
|
177
179
|
task = @task
|
178
180
|
end
|
179
181
|
|
data/lib/concurrent/exchanger.rb
CHANGED
@@ -8,7 +8,7 @@ require 'concurrent/utility/monotonic_time'
|
|
8
8
|
|
9
9
|
module Concurrent
|
10
10
|
|
11
|
-
# @!macro
|
11
|
+
# @!macro exchanger
|
12
12
|
#
|
13
13
|
# A synchronization point at which threads can pair and swap elements within
|
14
14
|
# pairs. Each thread presents some object on entry to the exchange method,
|
@@ -24,9 +24,6 @@ module Concurrent
|
|
24
24
|
# will remain correct.
|
25
25
|
#
|
26
26
|
# @see http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Exchanger.html java.util.concurrent.Exchanger
|
27
|
-
#
|
28
|
-
# @!macro edge_warning
|
29
|
-
#
|
30
27
|
# @example
|
31
28
|
#
|
32
29
|
# exchanger = Concurrent::Exchanger.new
|
@@ -36,20 +33,19 @@ module Concurrent
|
|
36
33
|
# Thread.new { puts "second: " << exchanger.exchange('bar', 1) } #=> "second: foo"
|
37
34
|
# ]
|
38
35
|
# threads.each {|t| t.join(2) }
|
39
|
-
|
36
|
+
|
40
37
|
# @!visibility private
|
41
38
|
class AbstractExchanger < Synchronization::Object
|
42
39
|
|
43
40
|
# @!visibility private
|
44
|
-
CANCEL = Object.new
|
41
|
+
CANCEL = ::Object.new
|
45
42
|
private_constant :CANCEL
|
46
43
|
|
47
|
-
# @!macro [attach] exchanger_method_initialize
|
48
44
|
def initialize
|
49
45
|
super
|
50
46
|
end
|
51
47
|
|
52
|
-
# @!macro
|
48
|
+
# @!macro exchanger_method_do_exchange
|
53
49
|
#
|
54
50
|
# Waits for another thread to arrive at this exchange point (unless the
|
55
51
|
# current thread is interrupted), and then transfers the given object to
|
@@ -61,7 +57,7 @@ module Concurrent
|
|
61
57
|
# @param [Object] value the value to exchange with another thread
|
62
58
|
# @param [Numeric, nil] timeout in seconds, `nil` blocks indefinitely
|
63
59
|
#
|
64
|
-
# @!macro
|
60
|
+
# @!macro exchanger_method_exchange
|
65
61
|
#
|
66
62
|
# In some edge cases when a `timeout` is given a return value of `nil` may be
|
67
63
|
# ambiguous. Specifically, if `nil` is a valid value in the exchange it will
|
@@ -75,8 +71,7 @@ module Concurrent
|
|
75
71
|
end
|
76
72
|
|
77
73
|
# @!macro exchanger_method_do_exchange
|
78
|
-
#
|
79
|
-
# @!macro [attach] exchanger_method_exchange_bang
|
74
|
+
# @!macro exchanger_method_exchange_bang
|
80
75
|
#
|
81
76
|
# On timeout a {Concurrent::TimeoutError} exception will be raised.
|
82
77
|
#
|
@@ -91,8 +86,7 @@ module Concurrent
|
|
91
86
|
end
|
92
87
|
|
93
88
|
# @!macro exchanger_method_do_exchange
|
94
|
-
#
|
95
|
-
# @!macro [attach] exchanger_method_try_exchange
|
89
|
+
# @!macro exchanger_method_try_exchange
|
96
90
|
#
|
97
91
|
# The return value will be a {Concurrent::Maybe} set to `Just` on success or
|
98
92
|
# `Nothing` on timeout.
|
@@ -130,7 +124,6 @@ module Concurrent
|
|
130
124
|
end
|
131
125
|
end
|
132
126
|
|
133
|
-
# @!macro exchanger
|
134
127
|
# @!macro internal_implementation_note
|
135
128
|
# @!visibility private
|
136
129
|
class RubyExchanger < AbstractExchanger
|
@@ -163,7 +156,6 @@ module Concurrent
|
|
163
156
|
end
|
164
157
|
private_constant :Node
|
165
158
|
|
166
|
-
# @!macro exchanger_method_initialize
|
167
159
|
def initialize
|
168
160
|
super
|
169
161
|
end
|
@@ -218,7 +210,7 @@ module Concurrent
|
|
218
210
|
# node's initial value. It never changes. It's what the fulfiller returns on
|
219
211
|
# success. The occupier's hole is where the fulfiller put its item. It's the
|
220
212
|
# item that the occupier returns on success. The latch is used for synchronization.
|
221
|
-
#
|
213
|
+
# Because a thread may act as either an occupier or fulfiller (or possibly
|
222
214
|
# both in periods of high contention) every thread creates a node when
|
223
215
|
# the exchange method is first called.
|
224
216
|
#
|
@@ -298,12 +290,10 @@ module Concurrent
|
|
298
290
|
|
299
291
|
if Concurrent.on_jruby?
|
300
292
|
|
301
|
-
# @!macro exchanger
|
302
293
|
# @!macro internal_implementation_note
|
303
294
|
# @!visibility private
|
304
295
|
class JavaExchanger < AbstractExchanger
|
305
296
|
|
306
|
-
# @!macro exchanger_method_initialize
|
307
297
|
def initialize
|
308
298
|
@exchanger = java.util.concurrent.Exchanger.new
|
309
299
|
end
|
@@ -315,9 +305,11 @@ module Concurrent
|
|
315
305
|
# @return [Object, CANCEL] the value exchanged by the other thread; {CANCEL} on timeout
|
316
306
|
def do_exchange(value, timeout)
|
317
307
|
if timeout.nil?
|
318
|
-
@exchanger.exchange(value)
|
308
|
+
Synchronization::JRuby.sleep_interruptibly { @exchanger.exchange(value) }
|
319
309
|
else
|
320
|
-
|
310
|
+
Synchronization::JRuby.sleep_interruptibly do
|
311
|
+
@exchanger.exchange(value, 1000 * timeout, java.util.concurrent.TimeUnit::MILLISECONDS)
|
312
|
+
end
|
321
313
|
end
|
322
314
|
rescue java.util.concurrent.TimeoutException
|
323
315
|
CANCEL
|
@@ -339,7 +331,7 @@ module Concurrent
|
|
339
331
|
class Exchanger < ExchangerImplementation
|
340
332
|
|
341
333
|
# @!method initialize
|
342
|
-
#
|
334
|
+
# Creates exchanger instance
|
343
335
|
|
344
336
|
# @!method exchange(value, timeout = nil)
|
345
337
|
# @!macro exchanger_method_do_exchange
|
@@ -93,7 +93,7 @@ module Concurrent
|
|
93
93
|
raise NotImplementedError
|
94
94
|
end
|
95
95
|
|
96
|
-
# @!macro
|
96
|
+
# @!macro executor_service_method_ns_shutdown_execution
|
97
97
|
#
|
98
98
|
# Callback method called when an orderly shutdown has completed.
|
99
99
|
# The default behavior is to signal all waiting threads.
|
@@ -101,7 +101,7 @@ module Concurrent
|
|
101
101
|
# do nothing
|
102
102
|
end
|
103
103
|
|
104
|
-
# @!macro
|
104
|
+
# @!macro executor_service_method_ns_kill_execution
|
105
105
|
#
|
106
106
|
# Callback method called when the executor has been killed.
|
107
107
|
# The default behavior is to do nothing.
|
@@ -4,7 +4,7 @@ module Concurrent
|
|
4
4
|
|
5
5
|
###################################################################
|
6
6
|
|
7
|
-
# @!macro
|
7
|
+
# @!macro executor_service_method_post
|
8
8
|
#
|
9
9
|
# Submit a task to the executor for asynchronous processing.
|
10
10
|
#
|
@@ -17,7 +17,7 @@ module Concurrent
|
|
17
17
|
#
|
18
18
|
# @raise [ArgumentError] if no task is given
|
19
19
|
|
20
|
-
# @!macro
|
20
|
+
# @!macro executor_service_method_left_shift
|
21
21
|
#
|
22
22
|
# Submit a task to the executor for asynchronous processing.
|
23
23
|
#
|
@@ -25,13 +25,13 @@ module Concurrent
|
|
25
25
|
#
|
26
26
|
# @return [self] returns itself
|
27
27
|
|
28
|
-
# @!macro
|
28
|
+
# @!macro executor_service_method_can_overflow_question
|
29
29
|
#
|
30
30
|
# Does the task queue have a maximum size?
|
31
31
|
#
|
32
32
|
# @return [Boolean] True if the task queue has a maximum size else false.
|
33
33
|
|
34
|
-
# @!macro
|
34
|
+
# @!macro executor_service_method_serialized_question
|
35
35
|
#
|
36
36
|
# Does this executor guarantee serialization of its operations?
|
37
37
|
#
|
@@ -41,7 +41,7 @@ module Concurrent
|
|
41
41
|
|
42
42
|
###################################################################
|
43
43
|
|
44
|
-
# @!macro
|
44
|
+
# @!macro executor_service_public_api
|
45
45
|
#
|
46
46
|
# @!method post(*args, &task)
|
47
47
|
# @!macro executor_service_method_post
|
@@ -57,23 +57,23 @@ module Concurrent
|
|
57
57
|
|
58
58
|
###################################################################
|
59
59
|
|
60
|
-
# @!macro
|
60
|
+
# @!macro executor_service_attr_reader_fallback_policy
|
61
61
|
# @return [Symbol] The fallback policy in effect. Either `:abort`, `:discard`, or `:caller_runs`.
|
62
62
|
|
63
|
-
# @!macro
|
63
|
+
# @!macro executor_service_method_shutdown
|
64
64
|
#
|
65
65
|
# Begin an orderly shutdown. Tasks already in the queue will be executed,
|
66
66
|
# but no new tasks will be accepted. Has no additional effect if the
|
67
67
|
# thread pool is not running.
|
68
68
|
|
69
|
-
# @!macro
|
69
|
+
# @!macro executor_service_method_kill
|
70
70
|
#
|
71
71
|
# Begin an immediate shutdown. In-progress tasks will be allowed to
|
72
72
|
# complete but enqueued tasks will be dismissed and no new tasks
|
73
73
|
# will be accepted. Has no additional effect if the thread pool is
|
74
74
|
# not running.
|
75
75
|
|
76
|
-
# @!macro
|
76
|
+
# @!macro executor_service_method_wait_for_termination
|
77
77
|
#
|
78
78
|
# Block until executor shutdown is complete or until `timeout` seconds have
|
79
79
|
# passed.
|
@@ -85,31 +85,31 @@ module Concurrent
|
|
85
85
|
#
|
86
86
|
# @return [Boolean] `true` if shutdown complete or false on `timeout`
|
87
87
|
|
88
|
-
# @!macro
|
88
|
+
# @!macro executor_service_method_running_question
|
89
89
|
#
|
90
90
|
# Is the executor running?
|
91
91
|
#
|
92
92
|
# @return [Boolean] `true` when running, `false` when shutting down or shutdown
|
93
93
|
|
94
|
-
# @!macro
|
94
|
+
# @!macro executor_service_method_shuttingdown_question
|
95
95
|
#
|
96
96
|
# Is the executor shuttingdown?
|
97
97
|
#
|
98
98
|
# @return [Boolean] `true` when not running and not shutdown, else `false`
|
99
99
|
|
100
|
-
# @!macro
|
100
|
+
# @!macro executor_service_method_shutdown_question
|
101
101
|
#
|
102
102
|
# Is the executor shutdown?
|
103
103
|
#
|
104
104
|
# @return [Boolean] `true` when shutdown, `false` when shutting down or running
|
105
105
|
|
106
|
-
# @!macro
|
106
|
+
# @!macro executor_service_method_auto_terminate_question
|
107
107
|
#
|
108
108
|
# Is the executor auto-terminate when the application exits?
|
109
109
|
#
|
110
110
|
# @return [Boolean] `true` when auto-termination is enabled else `false`.
|
111
111
|
|
112
|
-
# @!macro
|
112
|
+
# @!macro executor_service_method_auto_terminate_setter
|
113
113
|
#
|
114
114
|
# Set the auto-terminate behavior for this executor.
|
115
115
|
#
|
@@ -119,7 +119,7 @@ module Concurrent
|
|
119
119
|
|
120
120
|
###################################################################
|
121
121
|
|
122
|
-
# @!macro
|
122
|
+
# @!macro abstract_executor_service_public_api
|
123
123
|
#
|
124
124
|
# @!macro executor_service_public_api
|
125
125
|
#
|
@@ -3,44 +3,44 @@ require 'concurrent/executor/thread_pool_executor'
|
|
3
3
|
|
4
4
|
module Concurrent
|
5
5
|
|
6
|
-
# @!macro
|
6
|
+
# @!macro thread_pool_executor_constant_default_max_pool_size
|
7
7
|
# Default maximum number of threads that will be created in the pool.
|
8
8
|
|
9
|
-
# @!macro
|
9
|
+
# @!macro thread_pool_executor_constant_default_min_pool_size
|
10
10
|
# Default minimum number of threads that will be retained in the pool.
|
11
11
|
|
12
|
-
# @!macro
|
12
|
+
# @!macro thread_pool_executor_constant_default_max_queue_size
|
13
13
|
# Default maximum number of tasks that may be added to the task queue.
|
14
14
|
|
15
|
-
# @!macro
|
15
|
+
# @!macro thread_pool_executor_constant_default_thread_timeout
|
16
16
|
# Default maximum number of seconds a thread in the pool may remain idle
|
17
17
|
# before being reclaimed.
|
18
18
|
|
19
|
-
# @!macro
|
19
|
+
# @!macro thread_pool_executor_attr_reader_max_length
|
20
20
|
# The maximum number of threads that may be created in the pool.
|
21
21
|
# @return [Integer] The maximum number of threads that may be created in the pool.
|
22
22
|
|
23
|
-
# @!macro
|
23
|
+
# @!macro thread_pool_executor_attr_reader_min_length
|
24
24
|
# The minimum number of threads that may be retained in the pool.
|
25
25
|
# @return [Integer] The minimum number of threads that may be retained in the pool.
|
26
26
|
|
27
|
-
# @!macro
|
27
|
+
# @!macro thread_pool_executor_attr_reader_largest_length
|
28
28
|
# The largest number of threads that have been created in the pool since construction.
|
29
29
|
# @return [Integer] The largest number of threads that have been created in the pool since construction.
|
30
30
|
|
31
|
-
# @!macro
|
31
|
+
# @!macro thread_pool_executor_attr_reader_scheduled_task_count
|
32
32
|
# The number of tasks that have been scheduled for execution on the pool since construction.
|
33
33
|
# @return [Integer] The number of tasks that have been scheduled for execution on the pool since construction.
|
34
34
|
|
35
|
-
# @!macro
|
35
|
+
# @!macro thread_pool_executor_attr_reader_completed_task_count
|
36
36
|
# The number of tasks that have been completed by the pool since construction.
|
37
37
|
# @return [Integer] The number of tasks that have been completed by the pool since construction.
|
38
38
|
|
39
|
-
# @!macro
|
39
|
+
# @!macro thread_pool_executor_attr_reader_idletime
|
40
40
|
# The number of seconds that a thread may be idle before being reclaimed.
|
41
41
|
# @return [Integer] The number of seconds that a thread may be idle before being reclaimed.
|
42
42
|
|
43
|
-
# @!macro
|
43
|
+
# @!macro thread_pool_executor_attr_reader_max_queue
|
44
44
|
# The maximum number of tasks that may be waiting in the work queue at any one time.
|
45
45
|
# When the queue size reaches `max_queue` subsequent tasks will be rejected in
|
46
46
|
# accordance with the configured `fallback_policy`.
|
@@ -49,15 +49,15 @@ module Concurrent
|
|
49
49
|
# When the queue size reaches `max_queue` subsequent tasks will be rejected in
|
50
50
|
# accordance with the configured `fallback_policy`.
|
51
51
|
|
52
|
-
# @!macro
|
52
|
+
# @!macro thread_pool_executor_attr_reader_length
|
53
53
|
# The number of threads currently in the pool.
|
54
54
|
# @return [Integer] The number of threads currently in the pool.
|
55
55
|
|
56
|
-
# @!macro
|
56
|
+
# @!macro thread_pool_executor_attr_reader_queue_length
|
57
57
|
# The number of tasks in the queue awaiting execution.
|
58
58
|
# @return [Integer] The number of tasks in the queue awaiting execution.
|
59
59
|
|
60
|
-
# @!macro
|
60
|
+
# @!macro thread_pool_executor_attr_reader_remaining_capacity
|
61
61
|
# Number of tasks that may be enqueued before reaching `max_queue` and rejecting
|
62
62
|
# new tasks. A value of -1 indicates that the queue may grow without bound.
|
63
63
|
#
|
@@ -68,7 +68,7 @@ module Concurrent
|
|
68
68
|
|
69
69
|
|
70
70
|
|
71
|
-
# @!macro
|
71
|
+
# @!macro thread_pool_executor_public_api
|
72
72
|
#
|
73
73
|
# @!macro abstract_executor_service_public_api
|
74
74
|
#
|
@@ -108,7 +108,7 @@ module Concurrent
|
|
108
108
|
|
109
109
|
|
110
110
|
|
111
|
-
# @!macro
|
111
|
+
# @!macro thread_pool_options
|
112
112
|
#
|
113
113
|
# **Thread Pool Options**
|
114
114
|
#
|
@@ -169,7 +169,7 @@ module Concurrent
|
|
169
169
|
|
170
170
|
|
171
171
|
|
172
|
-
# @!macro
|
172
|
+
# @!macro fixed_thread_pool
|
173
173
|
#
|
174
174
|
# A thread pool that reuses a fixed number of threads operating off an unbounded queue.
|
175
175
|
# At any point, at most `num_threads` will be active processing tasks. When all threads are busy new
|
@@ -182,7 +182,7 @@ module Concurrent
|
|
182
182
|
# @!macro thread_pool_options
|
183
183
|
class FixedThreadPool < ThreadPoolExecutor
|
184
184
|
|
185
|
-
# @!macro
|
185
|
+
# @!macro fixed_thread_pool_method_initialize
|
186
186
|
#
|
187
187
|
# Create a new thread pool.
|
188
188
|
#
|