polyphony 0.43.8 → 0.45.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/.rubocop.yml +7 -1
- data/CHANGELOG.md +38 -0
- data/Gemfile.lock +13 -11
- data/README.md +20 -5
- data/Rakefile +1 -1
- data/TODO.md +16 -14
- data/bin/stress.rb +28 -0
- data/docs/_posts/2020-07-26-polyphony-0.44.md +77 -0
- data/docs/api-reference/thread.md +1 -1
- data/docs/getting-started/overview.md +14 -14
- data/docs/getting-started/tutorial.md +1 -1
- data/examples/adapters/sequel_mysql.rb +23 -0
- data/examples/adapters/sequel_mysql_pool.rb +33 -0
- data/examples/core/{xx-agent.rb → xx-backend.rb} +5 -5
- data/examples/core/xx-channels.rb +4 -2
- data/examples/core/xx-using-a-mutex.rb +2 -1
- data/examples/io/xx-pry.rb +18 -0
- data/examples/io/xx-rack_server.rb +71 -0
- data/examples/performance/thread-vs-fiber/polyphony_server_read_loop.rb +1 -1
- data/ext/polyphony/backend.h +41 -0
- data/ext/polyphony/event.c +86 -0
- data/ext/polyphony/extconf.rb +1 -1
- data/ext/polyphony/fiber.c +0 -5
- data/ext/polyphony/{libev_agent.c → libev_backend.c} +234 -228
- data/ext/polyphony/polyphony.c +4 -0
- data/ext/polyphony/polyphony.h +16 -16
- data/ext/polyphony/polyphony_ext.c +4 -2
- data/ext/polyphony/queue.c +52 -12
- data/ext/polyphony/thread.c +55 -42
- data/lib/polyphony.rb +25 -39
- data/lib/polyphony/adapters/irb.rb +2 -17
- data/lib/polyphony/adapters/mysql2.rb +19 -0
- data/lib/polyphony/adapters/postgres.rb +5 -5
- data/lib/polyphony/adapters/process.rb +2 -2
- data/lib/polyphony/adapters/readline.rb +17 -0
- data/lib/polyphony/adapters/sequel.rb +45 -0
- data/lib/polyphony/core/channel.rb +3 -34
- data/lib/polyphony/core/exceptions.rb +11 -0
- data/lib/polyphony/core/global_api.rb +11 -6
- data/lib/polyphony/core/resource_pool.rb +22 -71
- data/lib/polyphony/core/sync.rb +48 -9
- data/lib/polyphony/core/throttler.rb +1 -1
- data/lib/polyphony/extensions/core.rb +37 -19
- data/lib/polyphony/extensions/fiber.rb +5 -1
- data/lib/polyphony/extensions/io.rb +7 -8
- data/lib/polyphony/extensions/openssl.rb +6 -6
- data/lib/polyphony/extensions/socket.rb +12 -22
- data/lib/polyphony/extensions/thread.rb +6 -5
- data/lib/polyphony/net.rb +2 -1
- data/lib/polyphony/version.rb +1 -1
- data/polyphony.gemspec +6 -3
- data/test/helper.rb +1 -1
- data/test/{test_agent.rb → test_backend.rb} +22 -22
- data/test/test_event.rb +1 -0
- data/test/test_fiber.rb +21 -5
- data/test/test_io.rb +1 -1
- data/test/test_kernel.rb +5 -0
- data/test/test_queue.rb +20 -0
- data/test/test_resource_pool.rb +34 -43
- data/test/test_signal.rb +5 -29
- data/test/test_sync.rb +52 -0
- metadata +74 -30
- data/.gitbook.yaml +0 -4
- data/lib/polyphony/event.rb +0 -17
data/test/test_event.rb
CHANGED
data/test/test_fiber.rb
CHANGED
@@ -352,7 +352,7 @@ class FiberTest < MiniTest::Test
|
|
352
352
|
result = []
|
353
353
|
f = Fiber.current.spin do
|
354
354
|
result << :start
|
355
|
-
result << Thread.current.
|
355
|
+
result << Thread.current.backend.sleep(1)
|
356
356
|
end
|
357
357
|
snooze
|
358
358
|
f.interrupt
|
@@ -413,6 +413,22 @@ class FiberTest < MiniTest::Test
|
|
413
413
|
f2&.stop
|
414
414
|
end
|
415
415
|
|
416
|
+
def test_interject
|
417
|
+
buf = []
|
418
|
+
f = spin_loop { sleep }
|
419
|
+
snooze
|
420
|
+
f.interject { buf << Fiber.current }
|
421
|
+
snooze
|
422
|
+
assert_equal [f], buf
|
423
|
+
assert_equal :waiting, f.state
|
424
|
+
|
425
|
+
f.interject { buf << :foo; raise Polyphony::MoveOn }
|
426
|
+
snooze
|
427
|
+
|
428
|
+
assert_equal [f, :foo], buf
|
429
|
+
assert_equal :dead, f.state
|
430
|
+
end
|
431
|
+
|
416
432
|
def test_state
|
417
433
|
counter = 0
|
418
434
|
f = spin do
|
@@ -625,7 +641,7 @@ class FiberTest < MiniTest::Test
|
|
625
641
|
end
|
626
642
|
end
|
627
643
|
sleep 0.1
|
628
|
-
f = spin { Thread.current.
|
644
|
+
f = spin { Thread.current.backend.waitpid(pid) }
|
629
645
|
o.close
|
630
646
|
Process.kill('INT', pid)
|
631
647
|
f.await
|
@@ -647,7 +663,7 @@ class FiberTest < MiniTest::Test
|
|
647
663
|
end
|
648
664
|
end
|
649
665
|
sleep 0.2
|
650
|
-
f = spin { Thread.current.
|
666
|
+
f = spin { Thread.current.backend.waitpid(pid) }
|
651
667
|
o.close
|
652
668
|
Process.kill('TERM', pid)
|
653
669
|
f.await
|
@@ -674,7 +690,7 @@ class FiberTest < MiniTest::Test
|
|
674
690
|
sleep 0.2
|
675
691
|
Process.kill('TERM', pid)
|
676
692
|
end
|
677
|
-
Thread.current.
|
693
|
+
Thread.current.backend.waitpid(pid)
|
678
694
|
klass = i.read
|
679
695
|
i.close
|
680
696
|
assert_equal 'Polyphony::Terminate', klass
|
@@ -692,7 +708,7 @@ class FiberTest < MiniTest::Test
|
|
692
708
|
|
693
709
|
f.schedule
|
694
710
|
f << 'bar'
|
695
|
-
snooze
|
711
|
+
2.times { snooze }
|
696
712
|
assert_equal ['bar'], buffer
|
697
713
|
end
|
698
714
|
end
|
data/test/test_io.rb
CHANGED
data/test/test_kernel.rb
CHANGED
@@ -19,6 +19,11 @@ class KernelTest < MiniTest::Test
|
|
19
19
|
timer&.stop
|
20
20
|
end
|
21
21
|
|
22
|
+
def test_Kernel_system_singleton_method
|
23
|
+
assert_equal true, Kernel.system("which ruby > /dev/null 2>&1")
|
24
|
+
assert_equal false, Kernel.system("which rruubbyy > /dev/null 2>&1")
|
25
|
+
end
|
26
|
+
|
22
27
|
def patch_open3
|
23
28
|
class << Open3
|
24
29
|
alias_method :orig_popen2, :popen2
|
data/test/test_queue.rb
CHANGED
@@ -109,4 +109,24 @@ class QueueTest < MiniTest::Test
|
|
109
109
|
@queue << :foo
|
110
110
|
assert_nil f1.await
|
111
111
|
end
|
112
|
+
|
113
|
+
def test_queue_size
|
114
|
+
assert_equal 0, @queue.size
|
115
|
+
|
116
|
+
@queue.push 1
|
117
|
+
|
118
|
+
assert_equal 1, @queue.size
|
119
|
+
|
120
|
+
@queue.push 2
|
121
|
+
|
122
|
+
assert_equal 2, @queue.size
|
123
|
+
|
124
|
+
@queue.shift
|
125
|
+
|
126
|
+
assert_equal 1, @queue.size
|
127
|
+
|
128
|
+
@queue.shift
|
129
|
+
|
130
|
+
assert_equal 0, @queue.size
|
131
|
+
end
|
112
132
|
end
|
data/test/test_resource_pool.rb
CHANGED
@@ -12,29 +12,19 @@ class ResourcePoolTest < MiniTest::Test
|
|
12
12
|
assert_equal 0, pool.size
|
13
13
|
|
14
14
|
results = []
|
15
|
-
4.times {
|
16
|
-
spin {
|
17
|
-
snooze
|
15
|
+
4.times { |i|
|
16
|
+
spin(:"foo#{i}") {
|
18
17
|
pool.acquire { |resource|
|
19
18
|
results << resource
|
20
19
|
snooze
|
21
20
|
}
|
22
21
|
}
|
23
22
|
}
|
24
|
-
|
25
|
-
assert_equal 2, pool.limit
|
26
|
-
assert_equal 0, pool.available
|
27
|
-
assert_equal 2, pool.size
|
28
|
-
|
29
|
-
2.times { snooze }
|
30
|
-
|
31
|
-
assert_equal ['a', 'b', 'a', 'b'], results
|
32
|
-
|
33
|
-
2.times { snooze }
|
34
|
-
|
23
|
+
Fiber.current.await_all_children
|
35
24
|
assert_equal 2, pool.limit
|
36
25
|
assert_equal 2, pool.available
|
37
26
|
assert_equal 2, pool.size
|
27
|
+
assert_equal ['a', 'b', 'a', 'b'], results
|
38
28
|
end
|
39
29
|
|
40
30
|
def test_discard
|
@@ -46,40 +36,18 @@ class ResourcePoolTest < MiniTest::Test
|
|
46
36
|
spin {
|
47
37
|
snooze
|
48
38
|
pool.acquire { |resource|
|
49
|
-
|
50
|
-
|
39
|
+
results << resource
|
40
|
+
pool.discard! if resource == 'b'
|
51
41
|
snooze
|
52
42
|
}
|
53
43
|
}
|
54
44
|
}
|
55
|
-
|
45
|
+
Fiber.current.await_all_children
|
56
46
|
|
57
47
|
assert_equal ['a', 'b', 'a', 'a'], results
|
58
48
|
assert_equal 1, pool.size
|
59
49
|
end
|
60
50
|
|
61
|
-
def test_add
|
62
|
-
resources = [+'a', +'b']
|
63
|
-
pool = Polyphony::ResourcePool.new(limit: 2) { resources.shift }
|
64
|
-
|
65
|
-
pool << +'c'
|
66
|
-
|
67
|
-
results = []
|
68
|
-
4.times {
|
69
|
-
spin {
|
70
|
-
snooze
|
71
|
-
pool.acquire { |resource|
|
72
|
-
results << resource
|
73
|
-
resource.__discard__ if resource == 'b'
|
74
|
-
snooze
|
75
|
-
}
|
76
|
-
}
|
77
|
-
}
|
78
|
-
6.times { snooze }
|
79
|
-
|
80
|
-
assert_equal ['c', 'a', 'c', 'a'], results
|
81
|
-
end
|
82
|
-
|
83
51
|
def test_single_resource_limit
|
84
52
|
resources = [+'a', +'b']
|
85
53
|
pool = Polyphony::ResourcePool.new(limit: 1) { resources.shift }
|
@@ -94,7 +62,7 @@ class ResourcePoolTest < MiniTest::Test
|
|
94
62
|
}
|
95
63
|
}
|
96
64
|
}
|
97
|
-
|
65
|
+
Fiber.current.await_all_children
|
98
66
|
|
99
67
|
assert_equal ['a'] * 10, results
|
100
68
|
end
|
@@ -128,11 +96,34 @@ class ResourcePoolTest < MiniTest::Test
|
|
128
96
|
resources = [+'a', +'b']
|
129
97
|
pool = Polyphony::ResourcePool.new(limit: 1) { resources.shift }
|
130
98
|
|
99
|
+
results = []
|
131
100
|
pool.acquire do |r|
|
132
|
-
|
133
|
-
|
134
|
-
|
101
|
+
results << r
|
102
|
+
2.times do
|
103
|
+
pool.acquire do |r|
|
104
|
+
results << r
|
105
|
+
end
|
135
106
|
end
|
136
107
|
end
|
108
|
+
assert_equal ['a']*3, results
|
109
|
+
end
|
110
|
+
|
111
|
+
def test_overloaded_resource_pool
|
112
|
+
pool = Polyphony::ResourcePool.new(limit: 1) { 1 }
|
113
|
+
|
114
|
+
buf = []
|
115
|
+
fibers = 2.times.map do |i|
|
116
|
+
spin(:"foo#{i}") do
|
117
|
+
2.times do
|
118
|
+
pool.acquire do |r|
|
119
|
+
buf << r
|
120
|
+
snooze
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
Fiber.current.await_all_children
|
126
|
+
|
127
|
+
assert_equal [1, 1, 1, 1], buf
|
137
128
|
end
|
138
129
|
end
|
data/test/test_signal.rb
CHANGED
@@ -23,7 +23,7 @@ class SignalTrapTest < Minitest::Test
|
|
23
23
|
sleep 0.01
|
24
24
|
o.close
|
25
25
|
Process.kill('INT', pid)
|
26
|
-
Thread.current.
|
26
|
+
Thread.current.backend.waitpid(pid)
|
27
27
|
buffer = i.read
|
28
28
|
assert_equal "3-interrupt\n", buffer
|
29
29
|
end
|
@@ -51,40 +51,16 @@ class SignalTrapTest < Minitest::Test
|
|
51
51
|
sleep 0.02
|
52
52
|
o.close
|
53
53
|
Process.kill('INT', pid)
|
54
|
-
Thread.current.
|
54
|
+
Thread.current.backend.waitpid(pid)
|
55
55
|
buffer = i.read
|
56
56
|
assert_equal "3 - interrupted\n2 - terminated\n1 - terminated\n", buffer
|
57
57
|
end
|
58
58
|
|
59
|
-
def
|
59
|
+
def test_interrupt_signal_scheduling
|
60
60
|
i, o = IO.pipe
|
61
61
|
pid = Polyphony.fork do
|
62
62
|
i.close
|
63
|
-
|
64
|
-
f2 = spin do
|
65
|
-
# this fiber will try to create a race condition by
|
66
|
-
# - being scheduled before f1 is scheduled with the Interrupt exception
|
67
|
-
# - scheduling f1 without an exception
|
68
|
-
suspend
|
69
|
-
f1.schedule
|
70
|
-
rescue ::Interrupt => e
|
71
|
-
o.puts '2-interrupt'
|
72
|
-
raise e
|
73
|
-
end
|
74
|
-
f1 = spin do
|
75
|
-
# this fiber is the one that will be current when the
|
76
|
-
# signal is trapped
|
77
|
-
sleep 1
|
78
|
-
o << 'boom'
|
79
|
-
rescue ::Interrupt => e
|
80
|
-
o.puts '1-interrupt'
|
81
|
-
raise e
|
82
|
-
end
|
83
|
-
old_trap = trap('INT') do
|
84
|
-
f2.schedule
|
85
|
-
old_trap.()
|
86
|
-
end
|
87
|
-
Fiber.current.await_all_children
|
63
|
+
sleep
|
88
64
|
rescue ::Interrupt => e
|
89
65
|
o.puts '3-interrupt'
|
90
66
|
ensure
|
@@ -93,7 +69,7 @@ class SignalTrapTest < Minitest::Test
|
|
93
69
|
o.close
|
94
70
|
sleep 0.1
|
95
71
|
Process.kill('INT', pid)
|
96
|
-
Thread.current.
|
72
|
+
Thread.current.backend.waitpid(pid)
|
97
73
|
buffer = i.read
|
98
74
|
assert_equal "3-interrupt\n", buffer
|
99
75
|
end
|
data/test/test_sync.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'helper'
|
4
|
+
|
5
|
+
class MutexTest < MiniTest::Test
|
6
|
+
def test_mutex
|
7
|
+
buf = []
|
8
|
+
lock = Polyphony::Mutex.new
|
9
|
+
(1..3).each do |i|
|
10
|
+
spin do
|
11
|
+
lock.synchronize do
|
12
|
+
buf << ">> #{i}"
|
13
|
+
sleep(rand * 0.05)
|
14
|
+
buf << "<< #{i}"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
Fiber.current.await_all_children
|
20
|
+
assert_equal ['>> 1', '<< 1', '>> 2', '<< 2', '>> 3', '<< 3'], buf
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_condition_variable
|
24
|
+
buf = []
|
25
|
+
lock1 = Polyphony::Mutex.new
|
26
|
+
lock2 = Polyphony::Mutex.new
|
27
|
+
cond = Polyphony::ConditionVariable.new
|
28
|
+
|
29
|
+
spin do
|
30
|
+
lock1.synchronize do
|
31
|
+
sleep 0.01
|
32
|
+
cond.wait(lock1)
|
33
|
+
lock2.synchronize do
|
34
|
+
buf << :foo
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
spin do
|
40
|
+
lock2.synchronize do
|
41
|
+
sleep 0.01
|
42
|
+
lock1.synchronize do
|
43
|
+
buf << :bar
|
44
|
+
end
|
45
|
+
cond.signal
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
Fiber.current.await_all_children
|
50
|
+
assert_equal [:bar, :foo], buf
|
51
|
+
end
|
52
|
+
end
|
metadata
CHANGED
@@ -1,43 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: polyphony
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.45.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sharon Rosner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-07-
|
11
|
+
date: 2020-07-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - '='
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 0.17.0
|
20
|
-
type: :development
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - '='
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 0.17.0
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: localhost
|
14
|
+
name: rake-compiler
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
30
16
|
requirements:
|
31
17
|
- - '='
|
32
18
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1.
|
19
|
+
version: 1.0.5
|
34
20
|
type: :development
|
35
21
|
prerelease: false
|
36
22
|
version_requirements: !ruby/object:Gem::Requirement
|
37
23
|
requirements:
|
38
24
|
- - '='
|
39
25
|
- !ruby/object:Gem::Version
|
40
|
-
version: 1.
|
26
|
+
version: 1.0.5
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: minitest
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -95,33 +81,33 @@ dependencies:
|
|
95
81
|
- !ruby/object:Gem::Version
|
96
82
|
version: 0.85.1
|
97
83
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
84
|
+
name: pry
|
99
85
|
requirement: !ruby/object:Gem::Requirement
|
100
86
|
requirements:
|
101
87
|
- - '='
|
102
88
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
89
|
+
version: 0.13.1
|
104
90
|
type: :development
|
105
91
|
prerelease: false
|
106
92
|
version_requirements: !ruby/object:Gem::Requirement
|
107
93
|
requirements:
|
108
94
|
- - '='
|
109
95
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
96
|
+
version: 0.13.1
|
111
97
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
98
|
+
name: pg
|
113
99
|
requirement: !ruby/object:Gem::Requirement
|
114
100
|
requirements:
|
115
101
|
- - '='
|
116
102
|
- !ruby/object:Gem::Version
|
117
|
-
version: 1.
|
103
|
+
version: 1.1.4
|
118
104
|
type: :development
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
107
|
requirements:
|
122
108
|
- - '='
|
123
109
|
- !ruby/object:Gem::Version
|
124
|
-
version: 1.
|
110
|
+
version: 1.1.4
|
125
111
|
- !ruby/object:Gem::Dependency
|
126
112
|
name: redis
|
127
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -164,6 +150,54 @@ dependencies:
|
|
164
150
|
- - "~>"
|
165
151
|
- !ruby/object:Gem::Version
|
166
152
|
version: 0.6.0
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: rack
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: 2.0.8
|
160
|
+
- - "<"
|
161
|
+
- !ruby/object:Gem::Version
|
162
|
+
version: 2.3.0
|
163
|
+
type: :development
|
164
|
+
prerelease: false
|
165
|
+
version_requirements: !ruby/object:Gem::Requirement
|
166
|
+
requirements:
|
167
|
+
- - ">="
|
168
|
+
- !ruby/object:Gem::Version
|
169
|
+
version: 2.0.8
|
170
|
+
- - "<"
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
version: 2.3.0
|
173
|
+
- !ruby/object:Gem::Dependency
|
174
|
+
name: mysql2
|
175
|
+
requirement: !ruby/object:Gem::Requirement
|
176
|
+
requirements:
|
177
|
+
- - '='
|
178
|
+
- !ruby/object:Gem::Version
|
179
|
+
version: 0.5.3
|
180
|
+
type: :development
|
181
|
+
prerelease: false
|
182
|
+
version_requirements: !ruby/object:Gem::Requirement
|
183
|
+
requirements:
|
184
|
+
- - '='
|
185
|
+
- !ruby/object:Gem::Version
|
186
|
+
version: 0.5.3
|
187
|
+
- !ruby/object:Gem::Dependency
|
188
|
+
name: sequel
|
189
|
+
requirement: !ruby/object:Gem::Requirement
|
190
|
+
requirements:
|
191
|
+
- - '='
|
192
|
+
- !ruby/object:Gem::Version
|
193
|
+
version: 5.34.0
|
194
|
+
type: :development
|
195
|
+
prerelease: false
|
196
|
+
version_requirements: !ruby/object:Gem::Requirement
|
197
|
+
requirements:
|
198
|
+
- - '='
|
199
|
+
- !ruby/object:Gem::Version
|
200
|
+
version: 5.34.0
|
167
201
|
- !ruby/object:Gem::Dependency
|
168
202
|
name: jekyll
|
169
203
|
requirement: !ruby/object:Gem::Requirement
|
@@ -228,7 +262,6 @@ extensions:
|
|
228
262
|
extra_rdoc_files:
|
229
263
|
- README.md
|
230
264
|
files:
|
231
|
-
- ".gitbook.yaml"
|
232
265
|
- ".github/workflows/test.yml"
|
233
266
|
- ".gitignore"
|
234
267
|
- ".rubocop.yml"
|
@@ -241,9 +274,11 @@ files:
|
|
241
274
|
- Rakefile
|
242
275
|
- TODO.md
|
243
276
|
- bin/polyphony-debug
|
277
|
+
- bin/stress.rb
|
244
278
|
- docs/_config.yml
|
245
279
|
- docs/_includes/head.html
|
246
280
|
- docs/_includes/title.html
|
281
|
+
- docs/_posts/2020-07-26-polyphony-0.44.md
|
247
282
|
- docs/_sass/custom/custom.scss
|
248
283
|
- docs/_sass/overrides.scss
|
249
284
|
- docs/_user-guide/all-about-timers.md
|
@@ -292,12 +327,14 @@ files:
|
|
292
327
|
- examples/adapters/redis_client.rb
|
293
328
|
- examples/adapters/redis_pubsub.rb
|
294
329
|
- examples/adapters/redis_pubsub_perf.rb
|
330
|
+
- examples/adapters/sequel_mysql.rb
|
331
|
+
- examples/adapters/sequel_mysql_pool.rb
|
295
332
|
- examples/core/01-spinning-up-fibers.rb
|
296
333
|
- examples/core/02-awaiting-fibers.rb
|
297
334
|
- examples/core/03-interrupting.rb
|
298
335
|
- examples/core/04-handling-signals.rb
|
299
|
-
- examples/core/xx-agent.rb
|
300
336
|
- examples/core/xx-at_exit.rb
|
337
|
+
- examples/core/xx-backend.rb
|
301
338
|
- examples/core/xx-caller.rb
|
302
339
|
- examples/core/xx-channels.rb
|
303
340
|
- examples/core/xx-daemon.rb
|
@@ -349,6 +386,8 @@ files:
|
|
349
386
|
- examples/io/xx-irb.rb
|
350
387
|
- examples/io/xx-net-http.rb
|
351
388
|
- examples/io/xx-open.rb
|
389
|
+
- examples/io/xx-pry.rb
|
390
|
+
- examples/io/xx-rack_server.rb
|
352
391
|
- examples/io/xx-switch.rb
|
353
392
|
- examples/io/xx-system.rb
|
354
393
|
- examples/io/xx-tcpserver.rb
|
@@ -388,11 +427,13 @@ files:
|
|
388
427
|
- ext/libev/ev_win32.c
|
389
428
|
- ext/libev/ev_wrap.h
|
390
429
|
- ext/libev/test_libev_win32.c
|
430
|
+
- ext/polyphony/backend.h
|
431
|
+
- ext/polyphony/event.c
|
391
432
|
- ext/polyphony/extconf.rb
|
392
433
|
- ext/polyphony/fiber.c
|
393
434
|
- ext/polyphony/libev.c
|
394
435
|
- ext/polyphony/libev.h
|
395
|
-
- ext/polyphony/
|
436
|
+
- ext/polyphony/libev_backend.c
|
396
437
|
- ext/polyphony/polyphony.c
|
397
438
|
- ext/polyphony/polyphony.h
|
398
439
|
- ext/polyphony/polyphony_ext.c
|
@@ -404,9 +445,12 @@ files:
|
|
404
445
|
- lib/polyphony.rb
|
405
446
|
- lib/polyphony/adapters/fs.rb
|
406
447
|
- lib/polyphony/adapters/irb.rb
|
448
|
+
- lib/polyphony/adapters/mysql2.rb
|
407
449
|
- lib/polyphony/adapters/postgres.rb
|
408
450
|
- lib/polyphony/adapters/process.rb
|
451
|
+
- lib/polyphony/adapters/readline.rb
|
409
452
|
- lib/polyphony/adapters/redis.rb
|
453
|
+
- lib/polyphony/adapters/sequel.rb
|
410
454
|
- lib/polyphony/adapters/trace.rb
|
411
455
|
- lib/polyphony/core/channel.rb
|
412
456
|
- lib/polyphony/core/exceptions.rb
|
@@ -415,7 +459,6 @@ files:
|
|
415
459
|
- lib/polyphony/core/sync.rb
|
416
460
|
- lib/polyphony/core/thread_pool.rb
|
417
461
|
- lib/polyphony/core/throttler.rb
|
418
|
-
- lib/polyphony/event.rb
|
419
462
|
- lib/polyphony/extensions/core.rb
|
420
463
|
- lib/polyphony/extensions/fiber.rb
|
421
464
|
- lib/polyphony/extensions/io.rb
|
@@ -431,7 +474,7 @@ files:
|
|
431
474
|
- test/q.rb
|
432
475
|
- test/run.rb
|
433
476
|
- test/stress.rb
|
434
|
-
- test/
|
477
|
+
- test/test_backend.rb
|
435
478
|
- test/test_event.rb
|
436
479
|
- test/test_ext.rb
|
437
480
|
- test/test_fiber.rb
|
@@ -444,6 +487,7 @@ files:
|
|
444
487
|
- test/test_signal.rb
|
445
488
|
- test/test_socket.rb
|
446
489
|
- test/test_supervise.rb
|
490
|
+
- test/test_sync.rb
|
447
491
|
- test/test_thread.rb
|
448
492
|
- test/test_thread_pool.rb
|
449
493
|
- test/test_throttler.rb
|