thread 0.0.8.1 → 0.1.0
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/lib/thread/pool.rb +52 -2
- data/thread.gemspec +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 136683911f76264b8d9c47d66607cd3d5b2d9d34
|
4
|
+
data.tar.gz: 8e669b7e1cad8f10467f45c56b0e7887b51ab9d8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 657218c2a64a1ef1e5593a6b73d3f29abe376d6c31757220aed94bb742abcd2aa0c743c9dfe1aa168839c0d9d547d01361ddea351db206c6b8a1d140fc53a316
|
7
|
+
data.tar.gz: b2546abceef43fd444a6acfb950abae2c5c164cab5bd4733b1296fa836ee7dde616fa80af86856f643a4d485363428b61dbaebecfb53e7acdfc9b7dadf03d4ee
|
data/lib/thread/pool.rb
CHANGED
@@ -117,6 +117,9 @@ class Thread::Pool
|
|
117
117
|
@cond = ConditionVariable.new
|
118
118
|
@mutex = Mutex.new
|
119
119
|
|
120
|
+
@done = ConditionVariable.new
|
121
|
+
@done_mutex = Mutex.new
|
122
|
+
|
120
123
|
@todo = []
|
121
124
|
@workers = []
|
122
125
|
@timeouts = {}
|
@@ -126,6 +129,7 @@ class Thread::Pool
|
|
126
129
|
@shutdown = false
|
127
130
|
@trim_requests = 0
|
128
131
|
@auto_trim = false
|
132
|
+
@idle_trim = nil
|
129
133
|
|
130
134
|
@mutex.synchronize {
|
131
135
|
min.times {
|
@@ -153,6 +157,22 @@ class Thread::Pool
|
|
153
157
|
@auto_trim = false
|
154
158
|
end
|
155
159
|
|
160
|
+
# Check if idle trimming is enabled.
|
161
|
+
def idle_trim?
|
162
|
+
!@idle_trim.nil?
|
163
|
+
end
|
164
|
+
|
165
|
+
# Enable idle trimming. Unneeded threads will be deleted after the given number of seconds of inactivity.
|
166
|
+
# The minimum number of threads is respeced.
|
167
|
+
def idle_trim!(timeout)
|
168
|
+
@idle_trim = timeout
|
169
|
+
end
|
170
|
+
|
171
|
+
# Turn of idle trimming.
|
172
|
+
def no_idle_trim!
|
173
|
+
@idle_trim = nil
|
174
|
+
end
|
175
|
+
|
156
176
|
# Resize the pool with the passed arguments.
|
157
177
|
def resize (min, max = nil)
|
158
178
|
@min = min
|
@@ -168,6 +188,19 @@ class Thread::Pool
|
|
168
188
|
}
|
169
189
|
end
|
170
190
|
|
191
|
+
# Are all tasks consumed ?
|
192
|
+
def done?
|
193
|
+
@todo.empty? and @waiting == @spawned
|
194
|
+
end
|
195
|
+
|
196
|
+
# Wait until all tasks are consumed. The caller will be blocked until then.
|
197
|
+
def wait_done
|
198
|
+
@done_mutex.synchronize {
|
199
|
+
return if done?
|
200
|
+
@done.wait @done_mutex
|
201
|
+
}
|
202
|
+
end
|
203
|
+
|
171
204
|
# Add a task to the pool which will execute the block with the given
|
172
205
|
# argument.
|
173
206
|
#
|
@@ -202,7 +235,7 @@ class Thread::Pool
|
|
202
235
|
def trim (force = false)
|
203
236
|
@mutex.synchronize {
|
204
237
|
if (force || @waiting > 0) && @spawned - @trim_requests > @min
|
205
|
-
@trim_requests
|
238
|
+
@trim_requests += 1
|
206
239
|
@cond.signal
|
207
240
|
end
|
208
241
|
}
|
@@ -306,7 +339,17 @@ private
|
|
306
339
|
break if shutdown?
|
307
340
|
|
308
341
|
@waiting += 1
|
309
|
-
|
342
|
+
|
343
|
+
report_done
|
344
|
+
|
345
|
+
if @idle_trim and @spawned > @min
|
346
|
+
check_time = Time.now + @idle_trim
|
347
|
+
@cond.wait @mutex, @idle_trim
|
348
|
+
@trim_requests += 1 if Time.now >= check_time && @spawned - @trim_requests > @min
|
349
|
+
else
|
350
|
+
@cond.wait @mutex
|
351
|
+
end
|
352
|
+
|
310
353
|
@waiting -= 1
|
311
354
|
end
|
312
355
|
|
@@ -368,6 +411,13 @@ private
|
|
368
411
|
end
|
369
412
|
}
|
370
413
|
end
|
414
|
+
|
415
|
+
def report_done
|
416
|
+
@done_mutex.synchronize {
|
417
|
+
@done.broadcast if done?
|
418
|
+
}
|
419
|
+
end
|
420
|
+
|
371
421
|
end
|
372
422
|
|
373
423
|
class Thread
|
data/thread.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: thread
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- meh.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-06-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -83,7 +83,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
83
83
|
version: '0'
|
84
84
|
requirements: []
|
85
85
|
rubyforge_project:
|
86
|
-
rubygems_version: 2.0.
|
86
|
+
rubygems_version: 2.0.3
|
87
87
|
signing_key:
|
88
88
|
specification_version: 4
|
89
89
|
summary: Various extensions to the base thread library.
|