concurrent-ruby 0.9.2-java → 1.0.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (121) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +49 -1
  3. data/README.md +86 -120
  4. data/lib/concurrent.rb +14 -5
  5. data/lib/concurrent/agent.rb +587 -0
  6. data/lib/concurrent/array.rb +39 -0
  7. data/lib/concurrent/async.rb +296 -149
  8. data/lib/concurrent/atom.rb +135 -45
  9. data/lib/concurrent/atomic/abstract_thread_local_var.rb +38 -0
  10. data/lib/concurrent/atomic/atomic_boolean.rb +83 -118
  11. data/lib/concurrent/atomic/atomic_fixnum.rb +101 -163
  12. data/lib/concurrent/atomic/atomic_reference.rb +1 -8
  13. data/lib/concurrent/atomic/count_down_latch.rb +62 -103
  14. data/lib/concurrent/atomic/cyclic_barrier.rb +3 -1
  15. data/lib/concurrent/atomic/event.rb +1 -1
  16. data/lib/concurrent/atomic/java_count_down_latch.rb +39 -0
  17. data/lib/concurrent/atomic/java_thread_local_var.rb +50 -0
  18. data/lib/concurrent/atomic/mutex_atomic_boolean.rb +60 -0
  19. data/lib/concurrent/atomic/mutex_atomic_fixnum.rb +91 -0
  20. data/lib/concurrent/atomic/mutex_count_down_latch.rb +43 -0
  21. data/lib/concurrent/atomic/mutex_semaphore.rb +115 -0
  22. data/lib/concurrent/atomic/read_write_lock.rb +5 -4
  23. data/lib/concurrent/atomic/reentrant_read_write_lock.rb +3 -1
  24. data/lib/concurrent/atomic/ruby_thread_local_var.rb +172 -0
  25. data/lib/concurrent/atomic/semaphore.rb +84 -178
  26. data/lib/concurrent/atomic/thread_local_var.rb +65 -294
  27. data/lib/concurrent/atomic_reference/jruby+truffle.rb +1 -0
  28. data/lib/concurrent/atomic_reference/jruby.rb +1 -1
  29. data/lib/concurrent/atomic_reference/mutex_atomic.rb +14 -8
  30. data/lib/concurrent/atomic_reference/ruby.rb +1 -1
  31. data/lib/concurrent/atomics.rb +7 -37
  32. data/lib/concurrent/collection/copy_on_notify_observer_set.rb +7 -15
  33. data/lib/concurrent/collection/copy_on_write_observer_set.rb +7 -15
  34. data/lib/concurrent/collection/java_non_concurrent_priority_queue.rb +84 -0
  35. data/lib/concurrent/collection/map/atomic_reference_map_backend.rb +927 -0
  36. data/lib/concurrent/collection/map/mri_map_backend.rb +66 -0
  37. data/lib/concurrent/collection/map/non_concurrent_map_backend.rb +144 -0
  38. data/lib/concurrent/collection/map/synchronized_map_backend.rb +86 -0
  39. data/lib/concurrent/collection/non_concurrent_priority_queue.rb +143 -0
  40. data/lib/concurrent/collection/ruby_non_concurrent_priority_queue.rb +150 -0
  41. data/lib/concurrent/concern/dereferenceable.rb +9 -24
  42. data/lib/concurrent/concern/logging.rb +1 -1
  43. data/lib/concurrent/concern/obligation.rb +11 -20
  44. data/lib/concurrent/concern/observable.rb +38 -13
  45. data/lib/concurrent/configuration.rb +23 -152
  46. data/lib/concurrent/constants.rb +8 -0
  47. data/lib/concurrent/delay.rb +14 -12
  48. data/lib/concurrent/exchanger.rb +339 -41
  49. data/lib/concurrent/executor/abstract_executor_service.rb +134 -0
  50. data/lib/concurrent/executor/executor_service.rb +23 -359
  51. data/lib/concurrent/executor/immediate_executor.rb +3 -2
  52. data/lib/concurrent/executor/java_executor_service.rb +100 -0
  53. data/lib/concurrent/executor/java_single_thread_executor.rb +3 -3
  54. data/lib/concurrent/executor/java_thread_pool_executor.rb +3 -4
  55. data/lib/concurrent/executor/ruby_executor_service.rb +78 -0
  56. data/lib/concurrent/executor/ruby_single_thread_executor.rb +10 -66
  57. data/lib/concurrent/executor/ruby_thread_pool_executor.rb +25 -22
  58. data/lib/concurrent/executor/safe_task_executor.rb +6 -7
  59. data/lib/concurrent/executor/serial_executor_service.rb +34 -0
  60. data/lib/concurrent/executor/serialized_execution.rb +10 -33
  61. data/lib/concurrent/executor/serialized_execution_delegator.rb +28 -0
  62. data/lib/concurrent/executor/simple_executor_service.rb +1 -10
  63. data/lib/concurrent/executor/single_thread_executor.rb +20 -10
  64. data/lib/concurrent/executor/timer_set.rb +8 -10
  65. data/lib/concurrent/executors.rb +12 -2
  66. data/lib/concurrent/future.rb +6 -4
  67. data/lib/concurrent/hash.rb +35 -0
  68. data/lib/concurrent/immutable_struct.rb +5 -1
  69. data/lib/concurrent/ivar.rb +12 -16
  70. data/lib/concurrent/lazy_register.rb +11 -8
  71. data/lib/concurrent/map.rb +180 -0
  72. data/lib/concurrent/maybe.rb +6 -3
  73. data/lib/concurrent/mutable_struct.rb +7 -6
  74. data/lib/concurrent/mvar.rb +26 -2
  75. data/lib/concurrent/{executor/executor.rb → options.rb} +5 -29
  76. data/lib/concurrent/promise.rb +7 -5
  77. data/lib/concurrent/scheduled_task.rb +13 -71
  78. data/lib/concurrent/settable_struct.rb +5 -4
  79. data/lib/concurrent/synchronization.rb +15 -3
  80. data/lib/concurrent/synchronization/abstract_lockable_object.rb +98 -0
  81. data/lib/concurrent/synchronization/abstract_object.rb +7 -146
  82. data/lib/concurrent/synchronization/abstract_struct.rb +2 -3
  83. data/lib/concurrent/synchronization/condition.rb +6 -4
  84. data/lib/concurrent/synchronization/jruby_lockable_object.rb +13 -0
  85. data/lib/concurrent/synchronization/jruby_object.rb +44 -0
  86. data/lib/concurrent/synchronization/lock.rb +3 -2
  87. data/lib/concurrent/synchronization/lockable_object.rb +72 -0
  88. data/lib/concurrent/synchronization/mri_lockable_object.rb +71 -0
  89. data/lib/concurrent/synchronization/mri_object.rb +43 -0
  90. data/lib/concurrent/synchronization/object.rb +140 -73
  91. data/lib/concurrent/synchronization/rbx_lockable_object.rb +65 -0
  92. data/lib/concurrent/synchronization/rbx_object.rb +30 -73
  93. data/lib/concurrent/synchronization/volatile.rb +34 -0
  94. data/lib/concurrent/thread_safe/synchronized_delegator.rb +50 -0
  95. data/lib/concurrent/thread_safe/util.rb +14 -0
  96. data/lib/concurrent/thread_safe/util/adder.rb +74 -0
  97. data/lib/concurrent/thread_safe/util/array_hash_rbx.rb +30 -0
  98. data/lib/concurrent/thread_safe/util/cheap_lockable.rb +118 -0
  99. data/lib/concurrent/thread_safe/util/power_of_two_tuple.rb +38 -0
  100. data/lib/concurrent/thread_safe/util/striped64.rb +241 -0
  101. data/lib/concurrent/thread_safe/util/volatile.rb +75 -0
  102. data/lib/concurrent/thread_safe/util/xor_shift_random.rb +50 -0
  103. data/lib/concurrent/timer_task.rb +3 -4
  104. data/lib/concurrent/tuple.rb +86 -0
  105. data/lib/concurrent/tvar.rb +5 -1
  106. data/lib/concurrent/utility/at_exit.rb +1 -1
  107. data/lib/concurrent/utility/engine.rb +4 -0
  108. data/lib/concurrent/utility/monotonic_time.rb +3 -4
  109. data/lib/concurrent/utility/native_extension_loader.rb +50 -30
  110. data/lib/concurrent/version.rb +2 -2
  111. data/lib/concurrent_ruby_ext.jar +0 -0
  112. metadata +47 -12
  113. data/lib/concurrent/atomic/condition.rb +0 -78
  114. data/lib/concurrent/collection/priority_queue.rb +0 -360
  115. data/lib/concurrent/synchronization/java_object.rb +0 -34
  116. data/lib/concurrent/synchronization/monitor_object.rb +0 -27
  117. data/lib/concurrent/synchronization/mutex_object.rb +0 -43
  118. data/lib/concurrent/utilities.rb +0 -5
  119. data/lib/concurrent/utility/timeout.rb +0 -39
  120. data/lib/concurrent/utility/timer.rb +0 -26
  121. data/lib/concurrent_ruby.rb +0 -2
@@ -9,13 +9,17 @@ module Concurrent
9
9
  #
10
10
  # @!macro copy_options
11
11
  module Dereferenceable
12
+ # NOTE: This module is going away in 2.0. In the mean time we need it to
13
+ # play nicely with the synchronization layer. This means that the
14
+ # including class SHOULD be synchronized and it MUST implement a
15
+ # `#synchronize` method. Not doing so will lead to runtime errors.
12
16
 
13
17
  # Return the value this object represents after applying the options specified
14
18
  # by the `#set_deref_options` method.
15
19
  #
16
20
  # @return [Object] the current value of the object
17
21
  def value
18
- mutex.synchronize { apply_deref_options(@value) }
22
+ synchronize { apply_deref_options(@value) }
19
23
  end
20
24
  alias_method :deref, :value
21
25
 
@@ -25,43 +29,24 @@ module Concurrent
25
29
  #
26
30
  # @param [Object] value the new value
27
31
  def value=(value)
28
- mutex.synchronize{ @value = value }
29
- end
30
-
31
- # A mutex lock used for synchronizing thread-safe operations. Methods defined
32
- # by `Dereferenceable` are synchronized using the `Mutex` returned from this
33
- # method. Operations performed by the including class that operate on the
34
- # `@value` instance variable should be locked with this `Mutex`.
35
- #
36
- # @return [Mutex] the synchronization object
37
- def mutex
38
- @mutex
39
- end
40
-
41
- # Initializes the internal `Mutex`.
42
- #
43
- # @note This method *must* be called from within the constructor of the including class.
44
- #
45
- # @see #mutex
46
- def init_mutex(mutex = Mutex.new)
47
- @mutex = mutex
32
+ synchronize{ @value = value }
48
33
  end
49
34
 
50
35
  # @!macro [attach] dereferenceable_set_deref_options
51
36
  # Set the options which define the operations #value performs before
52
37
  # returning data to the caller (dereferencing).
53
- #
38
+ #
54
39
  # @note Most classes that include this module will call `#set_deref_options`
55
40
  # from within the constructor, thus allowing these options to be set at
56
41
  # object creation.
57
- #
42
+ #
58
43
  # @param [Hash] opts the options defining dereference behavior.
59
44
  # @option opts [String] :dup_on_deref (false) call `#dup` before returning the data
60
45
  # @option opts [String] :freeze_on_deref (false) call `#freeze` before returning the data
61
46
  # @option opts [String] :copy_on_deref (nil) call the given `Proc` passing
62
47
  # the internal value and returning the value returned from the proc
63
48
  def set_deref_options(opts = {})
64
- mutex.synchronize{ ns_set_deref_options(opts) }
49
+ synchronize{ ns_set_deref_options(opts) }
65
50
  end
66
51
 
67
52
  # @!macro dereferenceable_set_deref_options
@@ -9,7 +9,7 @@ module Concurrent
9
9
  module Logging
10
10
  include Logger::Severity
11
11
 
12
- # Logs through {Configuration#logger}, it can be overridden by setting @logger
12
+ # Logs through {Concurrent.global_logger}, it can be overridden by setting @logger
13
13
  # @param [Integer] level one of Logger::Severity constants
14
14
  # @param [String] progname e.g. a path of an Actor
15
15
  # @param [String, nil] message when nil block is used to generate the message
@@ -3,14 +3,16 @@ require 'timeout'
3
3
 
4
4
  require 'concurrent/atomic/event'
5
5
  require 'concurrent/concern/dereferenceable'
6
- require 'concurrent/concern/deprecation'
7
6
 
8
7
  module Concurrent
9
8
  module Concern
10
9
 
11
10
  module Obligation
12
11
  include Concern::Dereferenceable
13
- include Concern::Deprecation
12
+ # NOTE: The Dereferenceable module is going away in 2.0. In the mean time
13
+ # we need it to place nicely with the synchronization layer. This means
14
+ # that the including class SHOULD be synchronized and it MUST implement a
15
+ # `#synchronize` method. Not doing so will lead to runtime errors.
14
16
 
15
17
  # Has the obligation been fulfilled?
16
18
  #
@@ -48,16 +50,6 @@ module Concurrent
48
50
  [:fulfilled, :rejected].include? state
49
51
  end
50
52
 
51
- # Has the obligation completed processing?
52
- #
53
- # @return [Boolean]
54
- #
55
- # @deprecated
56
- def completed?
57
- deprecated_method 'completed?', 'complete?'
58
- complete?
59
- end
60
-
61
53
  # Is the obligation still awaiting completion of processing?
62
54
  #
63
55
  # @return [Boolean]
@@ -116,7 +108,7 @@ module Concurrent
116
108
  #
117
109
  # @return [Symbol] the current state
118
110
  def state
119
- mutex.synchronize { @state }
111
+ synchronize { @state }
120
112
  end
121
113
 
122
114
  # If an exception was raised during processing this will return the
@@ -125,7 +117,7 @@ module Concurrent
125
117
  #
126
118
  # @return [Exception] the exception raised during processing or `nil`
127
119
  def reason
128
- mutex.synchronize { @reason }
120
+ synchronize { @reason }
129
121
  end
130
122
 
131
123
  # @example allows Obligation to be risen
@@ -144,8 +136,7 @@ module Concurrent
144
136
  end
145
137
 
146
138
  # @!visibility private
147
- def init_obligation(*args)
148
- init_mutex(*args)
139
+ def init_obligation
149
140
  @event = Event.new
150
141
  end
151
142
 
@@ -167,7 +158,7 @@ module Concurrent
167
158
 
168
159
  # @!visibility private
169
160
  def state=(value)
170
- mutex.synchronize { ns_set_state(value) }
161
+ synchronize { ns_set_state(value) }
171
162
  end
172
163
 
173
164
  # Atomic compare and set operation
@@ -175,12 +166,12 @@ module Concurrent
175
166
  #
176
167
  # @param [Symbol] next_state
177
168
  # @param [Symbol] expected_current
178
- #
169
+ #
179
170
  # @return [Boolean] true is state is changed, false otherwise
180
171
  #
181
172
  # @!visibility private
182
173
  def compare_and_set_state(next_state, *expected_current)
183
- mutex.synchronize do
174
+ synchronize do
184
175
  if expected_current.include? @state
185
176
  @state = next_state
186
177
  true
@@ -196,7 +187,7 @@ module Concurrent
196
187
  #
197
188
  # @!visibility private
198
189
  def if_state(*expected_states)
199
- mutex.synchronize do
190
+ synchronize do
200
191
  raise ArgumentError.new('no block given') unless block_given?
201
192
 
202
193
  if expected_states.include? @state
@@ -21,8 +21,8 @@ module Concurrent
21
21
  #
22
22
  # In a multi threaded environment things are more complex. The `subject` must
23
23
  # synchronize the access to its data structure and to do so currently we're
24
- # using two specialized ObserverSet: CopyOnWriteObserverSet and
25
- # CopyOnNotifyObserverSet.
24
+ # using two specialized ObserverSet: {Concurrent::Concern::CopyOnWriteObserverSet}
25
+ # and {Concurrent::Concern::CopyOnNotifyObserverSet}.
26
26
  #
27
27
  # When implementing and `observer` there's a very important rule to remember:
28
28
  # **there are no guarantees about the thread that will execute the callback**
@@ -49,30 +49,55 @@ module Concurrent
49
49
  # or an AtomicFixum)
50
50
  module Observable
51
51
 
52
- # @return [Object] the added observer
53
- def add_observer(*args, &block)
54
- observers.add_observer(*args, &block)
52
+ # @!macro [attach] observable_add_observer
53
+ #
54
+ # Adds an observer to this set. If a block is passed, the observer will be
55
+ # created by this method and no other params should be passed.
56
+ #
57
+ # @param [Object] observer the observer to add
58
+ # @param [Symbol] func the function to call on the observer during notification.
59
+ # Default is :update
60
+ # @return [Object] the added observer
61
+ def add_observer(observer = nil, func = :update, &block)
62
+ observers.add_observer(observer, func, &block)
55
63
  end
56
64
 
57
- # as #add_observer but it can be used for chaining
65
+ # As `#add_observer` but can be used for chaining.
66
+ #
67
+ # @param [Object] observer the observer to add
68
+ # @param [Symbol] func the function to call on the observer during notification.
58
69
  # @return [Observable] self
59
- def with_observer(*args, &block)
60
- add_observer(*args, &block)
70
+ def with_observer(observer = nil, func = :update, &block)
71
+ add_observer(observer, func, &block)
61
72
  self
62
73
  end
63
74
 
64
- # @return [Object] the deleted observer
65
- def delete_observer(*args)
66
- observers.delete_observer(*args)
75
+ # @!macro [attach] observable_delete_observer
76
+ #
77
+ # Remove `observer` as an observer on this object so that it will no
78
+ # longer receive notifications.
79
+ #
80
+ # @param [Object] observer the observer to remove
81
+ # @return [Object] the deleted observer
82
+ def delete_observer(observer)
83
+ observers.delete_observer(observer)
67
84
  end
68
85
 
69
- # @return [Observable] self
86
+ # @!macro [attach] observable_delete_observers
87
+ #
88
+ # Remove all observers associated with this object.
89
+ #
90
+ # @return [Observable] self
70
91
  def delete_observers
71
92
  observers.delete_observers
72
93
  self
73
94
  end
74
95
 
75
- # @return [Integer] the observers count
96
+ # @!macro [attach] observable_count_observers
97
+ #
98
+ # Return the number of observers associated with this object.
99
+ #
100
+ # @return [Integer] the observers count
76
101
  def count_observers
77
102
  observers.count_observers
78
103
  end
@@ -2,18 +2,17 @@ require 'thread'
2
2
  require 'concurrent/delay'
3
3
  require 'concurrent/errors'
4
4
  require 'concurrent/atomic/atomic_reference'
5
- require 'concurrent/concern/deprecation'
6
5
  require 'concurrent/concern/logging'
7
- require 'concurrent/executor/timer_set'
8
6
  require 'concurrent/executor/immediate_executor'
9
- require 'concurrent/executor/fixed_thread_pool'
10
- require 'concurrent/executor/thread_pool_executor'
11
7
  require 'concurrent/utility/at_exit'
12
8
  require 'concurrent/utility/processor_counter'
13
9
 
14
10
  module Concurrent
15
11
  extend Concern::Logging
16
- extend Concern::Deprecation
12
+
13
+ autoload :Options, 'concurrent/options'
14
+ autoload :TimerSet, 'concurrent/executor/timer_set'
15
+ autoload :ThreadPoolExecutor, 'concurrent/executor/thread_pool_executor'
17
16
 
18
17
  # @return [Logger] Logger with provided level and output.
19
18
  def self.create_stdlib_logger(level = Logger::FATAL, output = $stderr)
@@ -25,19 +24,19 @@ module Concurrent
25
24
  msg
26
25
  when Exception
27
26
  format "%s (%s)\n%s",
28
- msg.message, msg.class, (msg.backtrace || []).join("\n")
27
+ msg.message, msg.class, (msg.backtrace || []).join("\n")
29
28
  else
30
29
  msg.inspect
31
30
  end
32
31
  format "[%s] %5s -- %s: %s\n",
33
- datetime.strftime('%Y-%m-%d %H:%M:%S.%L'),
34
- severity,
35
- progname,
36
- formatted_message
32
+ datetime.strftime('%Y-%m-%d %H:%M:%S.%L'),
33
+ severity,
34
+ progname,
35
+ formatted_message
37
36
  end
38
37
 
39
38
  lambda do |loglevel, progname, message = nil, &block|
40
- logger.add loglevel, message, progname, &block
39
+ logger.add loglevel, message, progname, &block
41
40
  end
42
41
  end
43
42
 
@@ -95,25 +94,6 @@ module Concurrent
95
94
  AtExit.enabled = false
96
95
  end
97
96
 
98
- def self.disable_executor_auto_termination!
99
- deprecated_method 'disable_executor_auto_termination!', 'disable_at_exit_handlers!'
100
- disable_at_exit_handlers!
101
- end
102
-
103
- # @return [true,false]
104
- # @see .disable_executor_auto_termination!
105
- def self.disable_executor_auto_termination?
106
- deprecated_method 'disable_executor_auto_termination?', 'Concurrent::AtExit.enabled?'
107
- AtExit.enabled?
108
- end
109
-
110
- # terminates all pools and blocks until they are terminated
111
- # @see .disable_executor_auto_termination!
112
- def self.terminate_pools!
113
- deprecated_method 'terminate_pools!', 'Concurrent::AtExit.run'
114
- AtExit.run
115
- end
116
-
117
97
  # Global thread pool optimized for short, fast *operations*.
118
98
  #
119
99
  # @return [ThreadPoolExecutor] the thread pool
@@ -146,137 +126,28 @@ module Concurrent
146
126
  # - :immediate - {Concurrent.global_immediate_executor}
147
127
  # @return [Executor]
148
128
  def self.executor(executor_identifier)
149
- Executor.executor(executor_identifier)
129
+ Options.executor(executor_identifier)
150
130
  end
151
131
 
152
132
  def self.new_fast_executor(opts = {})
153
133
  FixedThreadPool.new(
154
- [2, Concurrent.processor_count].max,
155
- auto_terminate: opts.fetch(:auto_terminate, true),
156
- idletime: 60, # 1 minute
157
- max_queue: 0, # unlimited
158
- fallback_policy: :abort # shouldn't matter -- 0 max queue
134
+ [2, Concurrent.processor_count].max,
135
+ auto_terminate: opts.fetch(:auto_terminate, true),
136
+ idletime: 60, # 1 minute
137
+ max_queue: 0, # unlimited
138
+ fallback_policy: :abort # shouldn't matter -- 0 max queue
159
139
  )
160
140
  end
161
141
 
162
142
  def self.new_io_executor(opts = {})
163
143
  ThreadPoolExecutor.new(
164
- min_threads: [2, Concurrent.processor_count].max,
165
- max_threads: ThreadPoolExecutor::DEFAULT_MAX_POOL_SIZE,
166
- # max_threads: 1000,
167
- auto_terminate: opts.fetch(:auto_terminate, true),
168
- idletime: 60, # 1 minute
169
- max_queue: 0, # unlimited
170
- fallback_policy: :abort # shouldn't matter -- 0 max queue
144
+ min_threads: [2, Concurrent.processor_count].max,
145
+ max_threads: ThreadPoolExecutor::DEFAULT_MAX_POOL_SIZE,
146
+ # max_threads: 1000,
147
+ auto_terminate: opts.fetch(:auto_terminate, true),
148
+ idletime: 60, # 1 minute
149
+ max_queue: 0, # unlimited
150
+ fallback_policy: :abort # shouldn't matter -- 0 max queue
171
151
  )
172
152
  end
173
-
174
- # A gem-level configuration object.
175
- class Configuration
176
- include Concern::Deprecation
177
-
178
- # Create a new configuration object.
179
- def initialize
180
- end
181
-
182
- # if assigned to {#logger}, it will log nothing.
183
- # @deprecated Use Concurrent::NULL_LOGGER instead
184
- def no_logger
185
- deprecated_method 'Concurrent.configuration.no_logger', 'Concurrent::NULL_LOGGER'
186
- NULL_LOGGER
187
- end
188
-
189
- # a proc defining how to log messages, its interface has to be:
190
- # lambda { |level, progname, message = nil, &block| _ }
191
- #
192
- # @deprecated Use Concurrent.global_logger instead
193
- def logger
194
- deprecated_method 'Concurrent.configuration.logger', 'Concurrent.global_logger'
195
- Concurrent.global_logger.value
196
- end
197
-
198
- # a proc defining how to log messages, its interface has to be:
199
- # lambda { |level, progname, message = nil, &block| _ }
200
- #
201
- # @deprecated Use Concurrent.global_logger instead
202
- def logger=(value)
203
- deprecated_method 'Concurrent.configuration.logger=', 'Concurrent.global_logger='
204
- Concurrent.global_logger = value
205
- end
206
-
207
- # @deprecated Use Concurrent.global_io_executor instead
208
- def global_task_pool
209
- deprecated_method 'Concurrent.configuration.global_task_pool', 'Concurrent.global_io_executor'
210
- Concurrent.global_io_executor
211
- end
212
-
213
- # @deprecated Use Concurrent.global_fast_executor instead
214
- def global_operation_pool
215
- deprecated_method 'Concurrent.configuration.global_operation_pool', 'Concurrent.global_fast_executor'
216
- Concurrent.global_fast_executor
217
- end
218
-
219
- # @deprecated Use Concurrent.global_timer_set instead
220
- def global_timer_set
221
- deprecated_method 'Concurrent.configuration.global_timer_set', 'Concurrent.global_timer_set'
222
- Concurrent.global_timer_set
223
- end
224
-
225
- # @deprecated Replacing global thread pools is deprecated.
226
- # Use the :executor constructor option instead.
227
- def global_task_pool=(executor)
228
- deprecated 'Replacing global thread pools is deprecated. Use the :executor constructor option instead.'
229
- GLOBAL_IO_EXECUTOR.reconfigure { executor } or
230
- raise ConfigurationError.new('global task pool was already set')
231
- end
232
-
233
- # @deprecated Replacing global thread pools is deprecated.
234
- # Use the :executor constructor option instead.
235
- def global_operation_pool=(executor)
236
- deprecated 'Replacing global thread pools is deprecated. Use the :executor constructor option instead.'
237
- GLOBAL_FAST_EXECUTOR.reconfigure { executor } or
238
- raise ConfigurationError.new('global operation pool was already set')
239
- end
240
-
241
- # @deprecated Use Concurrent.new_io_executor instead
242
- def new_task_pool
243
- deprecated_method 'Concurrent.configuration.new_task_pool', 'Concurrent.new_io_executor'
244
- Concurrent.new_io_executor
245
- end
246
-
247
- # @deprecated Use Concurrent.new_fast_executor instead
248
- def new_operation_pool
249
- deprecated_method 'Concurrent.configuration.new_operation_pool', 'Concurrent.new_fast_executor'
250
- Concurrent.new_fast_executor
251
- end
252
-
253
- # @deprecated Use Concurrent.disable_executor_auto_termination! instead
254
- def auto_terminate=(value)
255
- deprecated_method 'Concurrent.configuration.auto_terminate=', 'Concurrent.disable_executor_auto_termination!'
256
- Concurrent.disable_executor_auto_termination! if !value
257
- end
258
-
259
- # @deprecated Use Concurrent.auto_terminate_global_executors? instead
260
- def auto_terminate
261
- deprecated_method 'Concurrent.configuration.auto_terminate', 'Concurrent.auto_terminate_global_executors?'
262
- Concurrent.auto_terminate_global_executors?
263
- end
264
- end
265
-
266
- # create the default configuration on load
267
- CONFIGURATION = AtomicReference.new(Configuration.new)
268
- private_constant :CONFIGURATION
269
-
270
- # @return [Configuration]
271
- def self.configuration
272
- CONFIGURATION.value
273
- end
274
-
275
- # Perform gem-level configuration.
276
- #
277
- # @yield the configuration commands
278
- # @yieldparam [Configuration] the current configuration object
279
- def self.configure
280
- yield(configuration)
281
- end
282
153
  end