hot_tub 0.5.3 → 1.0.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/.travis.yml +3 -3
- data/HISTORY.md +8 -1
- data/README.md +44 -52
- data/benchmarks/block_passing.rb +55 -51
- data/benchmarks/compare_concurrent.rb +99 -0
- data/benchmarks/compare_serial.rb +60 -0
- data/benchmarks/hot_tub.rb +95 -83
- data/lib/hot_tub.rb +7 -1
- data/lib/hot_tub/pool.rb +12 -7
- data/lib/hot_tub/reaper.rb +30 -9
- data/lib/hot_tub/sessions.rb +106 -36
- data/lib/hot_tub/version.rb +1 -1
- data/spec/helpers/moc_pool.rb +26 -6
- data/spec/hot_tub/integration/excon_spec.rb +4 -33
- data/spec/hot_tub/integration/net_http_spec.rb +3 -3
- data/spec/hot_tub/pool_spec.rb +2 -4
- data/spec/hot_tub/reaper_spec.rb +8 -14
- data/spec/hot_tub/sessions_spec.rb +46 -16
- data/spec/hot_tub_spec.rb +1 -1
- data/spec/spec_helper.rb +5 -0
- metadata +22 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 74ee741ed84ebe1bfdc105cea7cd6ea36d110069
|
4
|
+
data.tar.gz: 213604cfc56cffe9fa593f4a4fe30bd139dafdcd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 847dc6a4bd53ed60cddcd7103f341ec3b2f8e1c2fad9f380fd614ee7291cc850d0eb56fe44d8ad85e8f209f4566547fbd4b13225fadb9c8ba9f6159dbbd2056d
|
7
|
+
data.tar.gz: a82fd572a976426711af212b2d5123432883abadea80f75940097b44c1cc7755cefca6659f151c37fb569f5ec1a04fccb51143fc137aa34490b85ea418665e00
|
data/.travis.yml
CHANGED
data/HISTORY.md
CHANGED
@@ -3,7 +3,14 @@ HotTub Changelog
|
|
3
3
|
|
4
4
|
Head
|
5
5
|
=======
|
6
|
-
- None yet
|
6
|
+
- None yet.
|
7
|
+
|
8
|
+
1.0.0
|
9
|
+
=======
|
10
|
+
- Allow setting a default client for HotTub::Sessions
|
11
|
+
- Deprecate HotTub.new
|
12
|
+
- Call pool.shutdown! when deleting a session
|
13
|
+
- Add Sessions.stage to lazy load pools
|
7
14
|
|
8
15
|
0.5.3
|
9
16
|
=======
|
data/README.md
CHANGED
@@ -1,28 +1,6 @@
|
|
1
1
|
# HotTub [](https://travis-ci.org/JoshMcKin/hot_tub) [](https://coveralls.io/r/JoshMcKin/hot_tub)
|
2
2
|
|
3
|
-
Flexible, thread-safe, connection pooling for Ruby. Configurable for any client you desire
|
4
|
-
|
5
|
-
## Features
|
6
|
-
|
7
|
-
### HotTub::Pool
|
8
|
-
|
9
|
-
* Thread safe
|
10
|
-
* Lazy, pool starts off at 0 and grows as necessary.
|
11
|
-
* Non-Blocking, can be configured to always return a connection if your pool runs out under load. Overflow connections are returned to the pool for reuse. Once load dies, the pool is reaped down to size.
|
12
|
-
* Support for cleaning dirty resources, no one likes a dirty `HotTub`
|
13
|
-
* Support for closing resources on shutdown
|
14
|
-
* Support for process forking
|
15
|
-
|
16
|
-
|
17
|
-
### HotTub::Sessions
|
18
|
-
|
19
|
-
A synchronized hash where keys are mapped to a HotTub::Pools that are managed by a single HotTub::Reaper.
|
20
|
-
|
21
|
-
|
22
|
-
### HotTub::Reaper
|
23
|
-
|
24
|
-
A separate thread thats manages your pool(s). All HotTub::Pools managed by HotTub::Sessions share a single reaper. One-off HotTub::Pools have their own reaper. The reaper periodically checks pool(s) based on the `:reap_timeout` set for the pool or session. Over-flow connections or connections deemed reap-able ready are pulled from the pool and closed.
|
25
|
-
|
3
|
+
Flexible, thread-safe, connection pooling for Ruby. Configurable for any client you desire with built in support for Net::HTTP and [Excon](https://github.com/excon/excon).
|
26
4
|
|
27
5
|
### Requirements
|
28
6
|
|
@@ -60,51 +38,66 @@ HotTub::Sessions are used to manage multiple pools with a single object and usin
|
|
60
38
|
A global Sessions object is available from the HotTub module and has several helper methods.
|
61
39
|
|
62
40
|
require 'hot_tub'
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
# We are using the url as the key but could use anything.
|
69
|
-
# we are not setting :max_size so our connections will grow to match our currency.
|
70
|
-
# Once load dies down our pool will be reaped back down to 12 connections
|
71
|
-
|
72
|
-
URL = "https://google.com"
|
73
|
-
pool = HotTub.get_or_set(URL, { :size => 12 }) do
|
74
|
-
uri = URI.parse(URL)
|
41
|
+
|
42
|
+
# Lets configure HotTub global sessions to use NetHTTP as our default client
|
43
|
+
|
44
|
+
HotTub.default_client = lambda { |url|
|
45
|
+
uri = URI.parse(url)
|
75
46
|
http = Net::HTTP.new(uri.host, uri.port)
|
76
|
-
http.use_ssl = false
|
77
47
|
http.start
|
78
48
|
http
|
49
|
+
}
|
50
|
+
|
51
|
+
# Add a HotTub::Pool for "https://www.google.com" and use it.
|
52
|
+
HotTub.run("https://www.google.com") do |clnt|
|
53
|
+
puts clnt.get('/').code
|
54
|
+
end
|
55
|
+
|
56
|
+
# Re-uses the previously defined pool
|
57
|
+
HotTub.run("https://www.google.com") do |clnt|
|
58
|
+
puts clnt.get('/').code
|
79
59
|
end
|
80
60
|
|
81
|
-
#
|
61
|
+
# Add another HotTub::Pool for "https://www.yahoo.com" and use it
|
62
|
+
HotTub.run("https://www.yahoo.com") do |clnt|
|
63
|
+
puts clnt.get('/').code
|
64
|
+
end
|
82
65
|
|
83
|
-
|
66
|
+
# We can add more HotTub::Pools with unique settings.
|
67
|
+
# Lets add another HotTub::Pool of Excon clients with a pool size of 12.
|
68
|
+
# HotTub.stage sets the options passed to a settings cache, the pool is
|
69
|
+
# created the first time we call HotTub.run. We are not setting :max_size
|
70
|
+
# so our connections will grow to match our currency. Once load dies down
|
71
|
+
# our pool will be reaped back down to 12 connections
|
72
|
+
|
73
|
+
HotTub.stage('excon_yahoo', { :size => 12} ) do
|
74
|
+
Excon.new("https://yahoo.com", :thread_safe_sockets => false )
|
75
|
+
end
|
84
76
|
|
85
77
|
# Lets add Redis too. HotTub.add returns the pool created for that key so we
|
86
78
|
# can store that in an constant for easy access.
|
87
79
|
# We don't want too many connections so we set our :max_size. Under load our pool
|
88
80
|
# can grow to 30 connections. Once load dies down our pool can be reaped back down to 5
|
89
81
|
|
90
|
-
REDIS = HotTub.
|
82
|
+
REDIS = HotTub.add("redis", :size => 5, :max_size => 30) { Redis.new }
|
91
83
|
|
92
|
-
# Now we can call any of our pools using the key we set
|
93
|
-
|
94
|
-
HotTub.run(url) do |clnt|
|
95
|
-
puts clnt.head('/').code
|
96
|
-
end
|
84
|
+
# Now we can call any of our pools using the key we set.
|
97
85
|
|
98
|
-
HotTub.run('
|
99
|
-
puts clnt.get
|
86
|
+
HotTub.run('excon_yahoo') do |clnt|
|
87
|
+
puts clnt.get.status
|
100
88
|
end
|
101
89
|
|
102
|
-
# Since our REDIS
|
90
|
+
# Since our REDIS constant was set to HotTub::Pool instance return from HotTub.add
|
103
91
|
# we do not need the key when calling #run
|
104
92
|
REDIS.run do |clnt|
|
105
93
|
clnt.set('hot', 'stuff')
|
106
94
|
end
|
107
95
|
|
96
|
+
# Re-use "https://www.google.com" we created earlier
|
97
|
+
HotTub.run("https://www.google.com") do |clnt|
|
98
|
+
puts clnt.get('/').code
|
99
|
+
end
|
100
|
+
|
108
101
|
|
109
102
|
## Single Pool
|
110
103
|
|
@@ -123,22 +116,21 @@ A global Sessions object is available from the HotTub module and has several hel
|
|
123
116
|
|
124
117
|
HotTub has built in support for closing NetHTTP and Excon. If you need more control or have
|
125
118
|
a different library you would like to use, HotTub can be configured to support your needs
|
126
|
-
using `:close`, `:clean`, and `:reap?` options in a pools settings
|
119
|
+
using `:close`, `:clean`, and `:reap?` options in a pools settings, and each option can accept
|
120
|
+
a lambda that accepts the client as an argument or symbol representing a method to call on the client.
|
127
121
|
|
128
122
|
`:close` is used to define how a connections should be closed at shutdown and upon reaping.
|
129
|
-
reaped.
|
130
123
|
|
131
124
|
`:clean` is called on each existing connection as its pulled from the pool.
|
132
125
|
|
133
126
|
`:reap?` is used to determine if a connection in the pool is ready for reaping.
|
134
127
|
|
135
|
-
EX:
|
136
128
|
pool_options = {
|
137
129
|
:size => 5
|
138
130
|
:max_size => 10
|
139
|
-
:close =>
|
131
|
+
:close => :close
|
140
132
|
:clean => lambda { |clnt| clnt.reconnect if clnt.dirty? },
|
141
|
-
:reap? =>
|
133
|
+
:reap? => :stale? # returns truthy if we want to reap
|
142
134
|
}
|
143
135
|
|
144
136
|
HotTub.add('offBrand', pool_options) { MyCoolClient.new }
|
data/benchmarks/block_passing.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
-
require 'benchmark'
|
2
|
+
require 'benchmark/ips'
|
3
3
|
|
4
4
|
puts `ruby -v`
|
5
5
|
|
@@ -29,68 +29,72 @@ class BlockTest
|
|
29
29
|
end
|
30
30
|
|
31
31
|
|
32
|
-
|
33
|
-
Benchmark.bmbm do |x|
|
32
|
+
Benchmark.ips do |x|
|
34
33
|
x.report("block yield") do
|
35
|
-
|
36
|
-
BlockTest.block_yield { "foo" }
|
37
|
-
end
|
34
|
+
BlockTest.block_yield { "foo" }
|
38
35
|
end
|
39
36
|
x.report("block call") do
|
40
|
-
|
41
|
-
BlockTest.block_call { "foo" }
|
42
|
-
end
|
37
|
+
BlockTest.block_call { "foo" }
|
43
38
|
end
|
44
39
|
x.report("block to yield") do
|
45
|
-
|
46
|
-
BlockTest.block_to_yield { "foo" }
|
47
|
-
end
|
40
|
+
BlockTest.block_to_yield { "foo" }
|
48
41
|
end
|
49
42
|
x.report("block to call") do
|
50
|
-
|
51
|
-
BlockTest.block_to_call { "foo" }
|
52
|
-
end
|
43
|
+
BlockTest.block_to_call { "foo" }
|
53
44
|
end
|
45
|
+
x.compare!
|
54
46
|
end
|
55
47
|
|
56
48
|
# ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-darwin14]
|
57
|
-
#
|
58
|
-
#
|
59
|
-
#
|
60
|
-
#
|
61
|
-
#
|
62
|
-
#
|
63
|
-
|
64
|
-
#
|
65
|
-
#
|
66
|
-
#
|
67
|
-
|
68
|
-
#
|
49
|
+
# Calculating -------------------------------------
|
50
|
+
# block yield 108.249k i/100ms
|
51
|
+
# block call 64.448k i/100ms
|
52
|
+
# block to yield 64.881k i/100ms
|
53
|
+
# block to call 60.643k i/100ms
|
54
|
+
# -------------------------------------------------
|
55
|
+
# block yield 4.655M (± 3.2%) i/s - 23.274M
|
56
|
+
# block call 1.262M (± 3.2%) i/s - 6.316M
|
57
|
+
# block to yield 1.370M (± 3.8%) i/s - 6.877M
|
58
|
+
# block to call 1.174M (± 2.1%) i/s - 5.882M
|
59
|
+
|
60
|
+
# Comparison:
|
61
|
+
# block yield: 4655424.9 i/s
|
62
|
+
# block to yield: 1369839.7 i/s - 3.40x slower
|
63
|
+
# block call: 1261742.0 i/s - 3.69x slower
|
64
|
+
# block to call: 1173741.8 i/s - 3.97x slower
|
69
65
|
|
70
66
|
# rubinius 2.5.8 (2.1.0 bef51ae3 2015-07-14 3.5.1 JI) [x86_64-darwin14.4.0]
|
71
|
-
#
|
72
|
-
#
|
73
|
-
#
|
74
|
-
#
|
75
|
-
#
|
76
|
-
#
|
77
|
-
|
78
|
-
#
|
79
|
-
#
|
80
|
-
#
|
81
|
-
|
82
|
-
#
|
67
|
+
# Calculating -------------------------------------
|
68
|
+
# block yield 148.685k i/100ms
|
69
|
+
# block call 140.704k i/100ms
|
70
|
+
# block to yield 163.061k i/100ms
|
71
|
+
# block to call 126.667k i/100ms
|
72
|
+
# -------------------------------------------------
|
73
|
+
# block yield 4.162M (± 3.0%) i/s - 20.816M
|
74
|
+
# block call 1.886M (± 2.8%) i/s - 9.427M
|
75
|
+
# block to yield 2.358M (± 2.1%) i/s - 11.903M
|
76
|
+
# block to call 1.678M (± 1.8%) i/s - 8.487M
|
77
|
+
|
78
|
+
# Comparison:
|
79
|
+
# block yield: 4162250.5 i/s
|
80
|
+
# block to yield: 2357928.4 i/s - 1.77x slower
|
81
|
+
# block call: 1885832.8 i/s - 2.21x slower
|
82
|
+
# block to call: 1678439.6 i/s - 2.48x slower
|
83
83
|
|
84
84
|
# jruby 9.0.3.0 (2.2.2) 2015-10-21 633c9aa Java HotSpot(TM) 64-Bit Server VM 23.5-b02 on 1.7.0_09-b05 +jit [darwin-x86_64]
|
85
|
-
#
|
86
|
-
#
|
87
|
-
#
|
88
|
-
#
|
89
|
-
#
|
90
|
-
#
|
91
|
-
|
92
|
-
#
|
93
|
-
#
|
94
|
-
#
|
95
|
-
|
96
|
-
#
|
85
|
+
# Calculating -------------------------------------
|
86
|
+
# block yield 109.774k i/100ms
|
87
|
+
# block call 114.963k i/100ms
|
88
|
+
# block to yield 125.225k i/100ms
|
89
|
+
# block to call 109.991k i/100ms
|
90
|
+
# -------------------------------------------------
|
91
|
+
# block yield 4.998M (± 6.1%) i/s - 24.919M
|
92
|
+
# block call 3.980M (± 5.4%) i/s - 19.889M
|
93
|
+
# block to yield 4.532M (± 7.4%) i/s - 22.541M
|
94
|
+
# block to call 3.771M (± 4.7%) i/s - 18.808M
|
95
|
+
|
96
|
+
# Comparison:
|
97
|
+
# block yield: 4997696.4 i/s
|
98
|
+
# block to yield: 4531931.2 i/s - 1.10x slower
|
99
|
+
# block call: 3979846.8 i/s - 1.26x slower
|
100
|
+
# block to call: 3771261.6 i/s - 1.33x slower
|
@@ -0,0 +1,99 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
require 'benchmark/ips'
|
3
|
+
require 'hot_tub'
|
4
|
+
require 'connection_pool'
|
5
|
+
|
6
|
+
class MocClient;end
|
7
|
+
|
8
|
+
puts `ruby -v`
|
9
|
+
|
10
|
+
Benchmark.ips do |b|
|
11
|
+
|
12
|
+
ht_no_max = HotTub::Pool.new(:size => 5, :name => "Match Concurrency") { MocClient.new }
|
13
|
+
b.report("HotTub::Pool - *") do
|
14
|
+
threads = []
|
15
|
+
20.times do
|
16
|
+
threads << Thread.new do
|
17
|
+
ht_no_max.run { |conn| sleep(0.01)}
|
18
|
+
end
|
19
|
+
end
|
20
|
+
threads.each do |t|
|
21
|
+
t.join
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
ht_sized = HotTub::Pool.new(:size => 5, :max_size => 5, :name => "Limited") { MocClient.new }
|
26
|
+
b.report("HotTub::Pool - 5") do
|
27
|
+
threads = []
|
28
|
+
20.times do
|
29
|
+
threads << Thread.new do
|
30
|
+
ht_sized.run { |conn| sleep(0.01)}
|
31
|
+
end
|
32
|
+
end
|
33
|
+
threads.each do |t|
|
34
|
+
t.join
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
cp_t = ConnectionPool.new(:size => 5) { MocClient.new }
|
39
|
+
b.report("ConnectionPool - 5") do
|
40
|
+
threads = []
|
41
|
+
20.times do
|
42
|
+
threads << Thread.new do
|
43
|
+
cp_t.with { |conn| sleep(0.01)}
|
44
|
+
end
|
45
|
+
end
|
46
|
+
threads.each do |t|
|
47
|
+
t.join
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
b.compare!
|
52
|
+
end
|
53
|
+
|
54
|
+
# ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-darwin14]
|
55
|
+
# Calculating -------------------------------------
|
56
|
+
# HotTub::Pool - * 7.000 i/100ms
|
57
|
+
# HotTub::Pool - 5 2.000 i/100ms
|
58
|
+
# ConnectionPool - 5 2.000 i/100ms
|
59
|
+
# -------------------------------------------------
|
60
|
+
# HotTub::Pool - * 80.183 (± 2.5%) i/s - 406.000
|
61
|
+
# HotTub::Pool - 5 22.229 (± 0.0%) i/s - 112.000
|
62
|
+
# ConnectionPool - 5 21.886 (± 0.0%) i/s - 110.000
|
63
|
+
|
64
|
+
# Comparison:
|
65
|
+
# HotTub::Pool - *: 80.2 i/s
|
66
|
+
# HotTub::Pool - 5: 22.2 i/s - 3.61x slower
|
67
|
+
# ConnectionPool - 5: 21.9 i/s - 3.66x slower
|
68
|
+
|
69
|
+
|
70
|
+
# jruby 9.0.3.0 (2.2.2) 2015-10-21 633c9aa Java HotSpot(TM) 64-Bit Server VM 23.5-b02 on 1.7.0_09-b05 +jit [darwin-x86_64]
|
71
|
+
# Calculating -------------------------------------
|
72
|
+
# HotTub::Pool - * 6.000 i/100ms
|
73
|
+
# HotTub::Pool - 5 2.000 i/100ms
|
74
|
+
# ConnectionPool - 5 2.000 i/100ms
|
75
|
+
# -------------------------------------------------
|
76
|
+
# HotTub::Pool - * 69.232 (± 8.7%) i/s - 342.000
|
77
|
+
# HotTub::Pool - 5 22.064 (± 4.5%) i/s - 112.000
|
78
|
+
# ConnectionPool - 5 22.036 (± 0.0%) i/s - 112.000
|
79
|
+
|
80
|
+
# Comparison:
|
81
|
+
# HotTub::Pool - *: 69.2 i/s
|
82
|
+
# HotTub::Pool - 5: 22.1 i/s - 3.14x slower
|
83
|
+
# ConnectionPool - 5: 22.0 i/s - 3.14x slower
|
84
|
+
|
85
|
+
|
86
|
+
# rubinius 2.5.8 (2.1.0 bef51ae3 2015-07-14 3.5.1 JI) [x86_64-darwin14.4.0]
|
87
|
+
# Calculating -------------------------------------
|
88
|
+
# HotTub::Pool - * 8.000 i/100ms
|
89
|
+
# HotTub::Pool - 5 2.000 i/100ms
|
90
|
+
# ConnectionPool - 5 2.000 i/100ms
|
91
|
+
# -------------------------------------------------
|
92
|
+
# HotTub::Pool - * 84.235 (± 3.6%) i/s - 424.000
|
93
|
+
# HotTub::Pool - 5 22.255 (± 0.0%) i/s - 112.000
|
94
|
+
# ConnectionPool - 5 22.259 (± 0.0%) i/s - 112.000
|
95
|
+
|
96
|
+
# Comparison:
|
97
|
+
# HotTub::Pool - *: 84.2 i/s
|
98
|
+
# ConnectionPool - 5: 22.3 i/s - 3.78x slower
|
99
|
+
# HotTub::Pool - 5: 22.3 i/s - 3.78x slower
|
@@ -0,0 +1,60 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
require 'benchmark/ips'
|
3
|
+
require 'hot_tub'
|
4
|
+
require 'connection_pool'
|
5
|
+
|
6
|
+
class MocClient;end
|
7
|
+
|
8
|
+
puts `ruby -v`
|
9
|
+
|
10
|
+
Benchmark.ips do |b|
|
11
|
+
|
12
|
+
ht_1 = HotTub::Pool.new(:size => 1) { MocClient.new }
|
13
|
+
b.report("HotTub::Pool") do
|
14
|
+
ht_1.run { |conn| }
|
15
|
+
end
|
16
|
+
|
17
|
+
cp_1 = ConnectionPool.new(:size => 1) { MocClient.new }
|
18
|
+
b.report("ConnectionPool") do
|
19
|
+
cp_1.with { |conn| }
|
20
|
+
end
|
21
|
+
b.compare!
|
22
|
+
end
|
23
|
+
|
24
|
+
# ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-darwin14]
|
25
|
+
# Calculating -------------------------------------
|
26
|
+
# HotTub::Pool 26.909k i/100ms
|
27
|
+
# ConnectionPool 10.413k i/100ms
|
28
|
+
# -------------------------------------------------
|
29
|
+
# HotTub::Pool 351.352k (± 1.9%) i/s - 1.776M
|
30
|
+
# ConnectionPool 122.342k (± 1.2%) i/s - 614.367k
|
31
|
+
|
32
|
+
# Comparison:
|
33
|
+
# HotTub::Pool: 351352.4 i/s
|
34
|
+
# ConnectionPool: 122341.6 i/s - 2.87x slower
|
35
|
+
|
36
|
+
|
37
|
+
# jruby 9.0.3.0 (2.2.2) 2015-10-21 633c9aa Java HotSpot(TM) 64-Bit Server VM 23.5-b02 on 1.7.0_09-b05 +jit [darwin-x86_64]
|
38
|
+
# Calculating -------------------------------------
|
39
|
+
# HotTub::Pool 16.145k i/100ms
|
40
|
+
# ConnectionPool 6.260k i/100ms
|
41
|
+
# -------------------------------------------------
|
42
|
+
# HotTub::Pool 304.280k (± 3.7%) i/s - 1.534M
|
43
|
+
# ConnectionPool 106.788k (± 2.6%) i/s - 538.360k
|
44
|
+
|
45
|
+
# Comparison:
|
46
|
+
# HotTub::Pool: 304279.7 i/s
|
47
|
+
# ConnectionPool: 106788.5 i/s - 2.85x slower
|
48
|
+
|
49
|
+
|
50
|
+
# rubinius 2.5.8 (2.1.0 bef51ae3 2015-07-14 3.5.1 JI) [x86_64-darwin14.4.0]
|
51
|
+
# Calculating -------------------------------------
|
52
|
+
# HotTub::Pool 12.259k i/100ms
|
53
|
+
# ConnectionPool 8.771k i/100ms
|
54
|
+
# -------------------------------------------------
|
55
|
+
# HotTub::Pool 415.132k (± 2.9%) i/s - 2.072M
|
56
|
+
# ConnectionPool 172.584k (± 1.7%) i/s - 868.329k
|
57
|
+
|
58
|
+
# Comparison:
|
59
|
+
# HotTub::Pool: 415131.6 i/s
|
60
|
+
# ConnectionPool: 172584.0 i/s - 2.41x slower
|