fibril 0.0.1 → 0.0.5
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/README.md +20 -3
- data/examples/example_async.rb +7 -21
- data/examples/example_coop_multi_tasking.rb +33 -0
- data/examples/example_enum_tick.rb +9 -0
- data/examples/example_execution_order.rb +14 -0
- data/examples/example_future_async_await.rb +22 -0
- data/examples/example_future_sync_await.rb +23 -0
- data/examples/example_guard.rb +9 -7
- data/examples/example_guard2.rb +19 -0
- data/examples/example_guard3.rb +46 -0
- data/examples/example_http.rb +60 -0
- data/examples/example_multiple_loops.rb +78 -0
- data/examples/example_redis.rb +49 -0
- data/examples/{example_loop.rb → example_tick.rb} +1 -1
- data/examples/example_tick2.rb +22 -0
- data/examples/example_timeout.rb +9 -0
- data/fibril.gemspec +1 -1
- data/fibril.todo +22 -16
- data/lib/fibril.rb +2 -240
- data/lib/fibril/async_proxy.rb +28 -0
- data/lib/fibril/basic_object.rb +20 -0
- data/lib/fibril/control.rb +20 -0
- data/lib/fibril/core.rb +299 -0
- data/lib/fibril/extras.rb +8 -0
- data/lib/fibril/fasync_proxy.rb +36 -0
- data/lib/fibril/ffuture.rb +24 -0
- data/lib/fibril/fibril_proxy.rb +31 -0
- data/lib/fibril/forked_non_blocking_io_wrapper.rb +51 -0
- data/lib/fibril/future.rb +24 -0
- data/lib/fibril/guard.rb +123 -0
- data/lib/fibril/loop.rb +36 -6
- data/lib/fibril/non_blocking_io_wrapper.rb +60 -0
- data/lib/fibril/tick_proxy.rb +30 -0
- data/lib/fibril/version.rb +1 -1
- metadata +43 -8
- data/examples/example_1.rb +0 -71
- data/examples/example_2.rb +0 -80
- data/examples/example_3.rb +0 -82
- data/examples/example_promise.rb +0 -23
data/lib/fibril/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fibril
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Wouter Coppieters
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-11-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -86,6 +86,20 @@ dependencies:
|
|
86
86
|
- - ">="
|
87
87
|
- !ruby/object:Gem::Version
|
88
88
|
version: 0.10.0
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: redis
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - ">="
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
96
|
+
type: :development
|
97
|
+
prerelease: false
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
89
103
|
- !ruby/object:Gem::Dependency
|
90
104
|
name: minitest
|
91
105
|
requirement: !ruby/object:Gem::Requirement
|
@@ -115,17 +129,38 @@ files:
|
|
115
129
|
- Rakefile
|
116
130
|
- bin/fibril
|
117
131
|
- bin/setup
|
118
|
-
- examples/example_1.rb
|
119
|
-
- examples/example_2.rb
|
120
|
-
- examples/example_3.rb
|
121
132
|
- examples/example_async.rb
|
133
|
+
- examples/example_coop_multi_tasking.rb
|
134
|
+
- examples/example_enum_tick.rb
|
135
|
+
- examples/example_execution_order.rb
|
136
|
+
- examples/example_future_async_await.rb
|
137
|
+
- examples/example_future_sync_await.rb
|
122
138
|
- examples/example_guard.rb
|
123
|
-
- examples/
|
124
|
-
- examples/
|
139
|
+
- examples/example_guard2.rb
|
140
|
+
- examples/example_guard3.rb
|
141
|
+
- examples/example_http.rb
|
142
|
+
- examples/example_multiple_loops.rb
|
143
|
+
- examples/example_redis.rb
|
144
|
+
- examples/example_tick.rb
|
145
|
+
- examples/example_tick2.rb
|
146
|
+
- examples/example_timeout.rb
|
125
147
|
- fibril.gemspec
|
126
148
|
- fibril.todo
|
127
149
|
- lib/fibril.rb
|
150
|
+
- lib/fibril/async_proxy.rb
|
151
|
+
- lib/fibril/basic_object.rb
|
152
|
+
- lib/fibril/control.rb
|
153
|
+
- lib/fibril/core.rb
|
154
|
+
- lib/fibril/extras.rb
|
155
|
+
- lib/fibril/fasync_proxy.rb
|
156
|
+
- lib/fibril/ffuture.rb
|
157
|
+
- lib/fibril/fibril_proxy.rb
|
158
|
+
- lib/fibril/forked_non_blocking_io_wrapper.rb
|
159
|
+
- lib/fibril/future.rb
|
160
|
+
- lib/fibril/guard.rb
|
128
161
|
- lib/fibril/loop.rb
|
162
|
+
- lib/fibril/non_blocking_io_wrapper.rb
|
163
|
+
- lib/fibril/tick_proxy.rb
|
129
164
|
- lib/fibril/version.rb
|
130
165
|
homepage: https://github.com/wouterken/Fibril
|
131
166
|
licenses:
|
@@ -147,7 +182,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
147
182
|
version: '0'
|
148
183
|
requirements: []
|
149
184
|
rubyforge_project:
|
150
|
-
rubygems_version: 2.
|
185
|
+
rubygems_version: 2.5.1
|
151
186
|
signing_key:
|
152
187
|
specification_version: 4
|
153
188
|
summary: Fibril
|
data/examples/example_1.rb
DELETED
@@ -1,71 +0,0 @@
|
|
1
|
-
require_relative '../lib/fibril'
|
2
|
-
|
3
|
-
require 'benchmark'
|
4
|
-
|
5
|
-
|
6
|
-
def get_5
|
7
|
-
5.tap{ async.sleep 0.5 }
|
8
|
-
end
|
9
|
-
|
10
|
-
def get_res
|
11
|
-
starts = Time.now
|
12
|
-
res = get_5
|
13
|
-
ends = Time.now
|
14
|
-
puts "Get res took #{ends - starts}"
|
15
|
-
res
|
16
|
-
end
|
17
|
-
Benchmark.bm do |bm|
|
18
|
-
# bm.report{
|
19
|
-
# Fibril do
|
20
|
-
# i = 0
|
21
|
-
# await fibril{ i = get_5 + 20 + i }.until{ i > 260 },
|
22
|
-
# fibril{ i = get_5 + 100 + i }.loop(2) do
|
23
|
-
# puts "Final i is #{i}"
|
24
|
-
# end
|
25
|
-
# end
|
26
|
-
# }
|
27
|
-
|
28
|
-
# puts "Done"
|
29
|
-
# sleep 2
|
30
|
-
bm.report{
|
31
|
-
|
32
|
-
Fibril do
|
33
|
-
i = 0
|
34
|
-
await(
|
35
|
-
fibril{ starts = Time.now; res = get_res;i = res + 20 + i; puts "Weave 1 took #{Time.now - starts}" }.until{ i > 260 },
|
36
|
-
fibril{ starts = Time.now; res = get_res;i = res + 100 + i; puts "Weave 2 took #{Time.now - starts}" }.loop(2)
|
37
|
-
) do
|
38
|
-
puts "Final i is #{i}"
|
39
|
-
end
|
40
|
-
end
|
41
|
-
}
|
42
|
-
end
|
43
|
-
|
44
|
-
|
45
|
-
# Fibril do
|
46
|
-
# await fibril{ puts 1; tick; puts 3 },
|
47
|
-
# fibril{ puts 2; tick; puts 4 } do
|
48
|
-
# puts "Finished"
|
49
|
-
# end
|
50
|
-
# end
|
51
|
-
# }
|
52
|
-
# end
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
# Thread.new do
|
57
|
-
# [
|
58
|
-
# Thread.new do
|
59
|
-
# puts "Big very very very very long message 1"
|
60
|
-
# puts "Big very very very very long message 2"
|
61
|
-
# puts "Big very very very very long message 5"
|
62
|
-
# puts "Big very very very very long message 6"
|
63
|
-
# end,
|
64
|
-
# Thread.new do
|
65
|
-
# puts "Big very very very very long message 3"
|
66
|
-
# puts "Big very very very very long message 4"
|
67
|
-
# puts "Big very very very very long message 7"
|
68
|
-
# puts "Big very very very very long message 8"
|
69
|
-
# end
|
70
|
-
# ].each(&:join)
|
71
|
-
# end.join
|
data/examples/example_2.rb
DELETED
@@ -1,80 +0,0 @@
|
|
1
|
-
require_relative 'fibril'
|
2
|
-
require "benchmark"
|
3
|
-
|
4
|
-
Benchmark.bm do |bm|
|
5
|
-
bm.report{
|
6
|
-
i = 0
|
7
|
-
100.times do
|
8
|
-
puts "A very long output statement : #{1}. Current thread: #{Thread.current}"
|
9
|
-
puts "A very long output statement : #{2}. Current thread: #{Thread.current}"
|
10
|
-
puts "A very long output statement : #{3}. Current thread: #{Thread.current}"
|
11
|
-
puts "A very long output statement : #{4}. Current thread: #{Thread.current}"
|
12
|
-
puts "A very long output statement : #{5}. Current thread: #{Thread.current}"
|
13
|
-
puts "A very long output statement : #{6}. Current thread: #{Thread.current}"
|
14
|
-
puts "A very long output statement : #{7}. Current thread: #{Thread.current}"
|
15
|
-
puts "A very long output statement : #{8}. Current thread: #{Thread.current}"
|
16
|
-
end
|
17
|
-
}
|
18
|
-
bm.report{
|
19
|
-
i = 0
|
20
|
-
|
21
|
-
100.times do
|
22
|
-
Fibril do
|
23
|
-
Fibril do
|
24
|
-
puts "A very long output statement : #{1}. Current thread: #{Thread.current}"
|
25
|
-
puts "A very long output statement : #{2}. Current thread: #{Thread.current}"
|
26
|
-
tick
|
27
|
-
puts "A very long output statement : #{3}. Current thread: #{Thread.current}"
|
28
|
-
puts "A very long output statement : #{4}. Current thread: #{Thread.current}"
|
29
|
-
end
|
30
|
-
|
31
|
-
Fibril do
|
32
|
-
puts "A very long output statement : #{5}. Current thread: #{Thread.current}"
|
33
|
-
puts "A very long output statement : #{6}. Current thread: #{Thread.current}"
|
34
|
-
tick
|
35
|
-
puts "A very long output statement : #{7}. Current thread: #{Thread.current}"
|
36
|
-
puts "A very long output statement : #{8}. Current thread: #{Thread.current}"
|
37
|
-
Fibril.stop
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
}
|
42
|
-
bm.report{
|
43
|
-
i = 0
|
44
|
-
100.times do
|
45
|
-
Thread.new do
|
46
|
-
[
|
47
|
-
Thread.new do
|
48
|
-
puts "A very long output statement : #{1}. Current thread: #{Thread.current}"
|
49
|
-
puts "A very long output statement : #{2}. Current thread: #{Thread.current}"
|
50
|
-
puts "A very long output statement : #{3}. Current thread: #{Thread.current}"
|
51
|
-
puts "A very long output statement : #{4}. Current thread: #{Thread.current}"
|
52
|
-
end,
|
53
|
-
Thread.new do
|
54
|
-
puts "A very long output statement : #{5}. Current thread: #{Thread.current}"
|
55
|
-
puts "A very long output statement : #{6}. Current thread: #{Thread.current}"
|
56
|
-
puts "A very long output statement : #{7}. Current thread: #{Thread.current}"
|
57
|
-
puts "A very long output statement : #{8}. Current thread: #{Thread.current}"
|
58
|
-
end
|
59
|
-
].each(&:join)
|
60
|
-
end.join
|
61
|
-
end
|
62
|
-
}
|
63
|
-
end
|
64
|
-
|
65
|
-
# Thread.new do
|
66
|
-
# [
|
67
|
-
# Thread.new do
|
68
|
-
# puts "Big very very very very long message 1"
|
69
|
-
# puts "Big very very very very long message 2"
|
70
|
-
# puts "Big very very very very long message 5"
|
71
|
-
# puts "Big very very very very long message 6"
|
72
|
-
# end,
|
73
|
-
# Thread.new do
|
74
|
-
# puts "Big very very very very long message 3"
|
75
|
-
# puts "Big very very very very long message 4"
|
76
|
-
# puts "Big very very very very long message 7"
|
77
|
-
# puts "Big very very very very long message 8"
|
78
|
-
# end
|
79
|
-
# ].each(&:join)
|
80
|
-
# end.join
|
data/examples/example_3.rb
DELETED
@@ -1,82 +0,0 @@
|
|
1
|
-
require_relative '../lib/fibril'
|
2
|
-
require "benchmark"
|
3
|
-
|
4
|
-
Benchmark.bm do |bm|
|
5
|
-
bm.report{
|
6
|
-
i = 0
|
7
|
-
1_000.times do
|
8
|
-
print "\rA very long output statement : #{1}. Current thread: #{Thread.current}"
|
9
|
-
print "\rA very long output statement : #{2}. Current thread: #{Thread.current}"
|
10
|
-
print "\rA very long output statement : #{3}. Current thread: #{Thread.current}"
|
11
|
-
print "\rA very long output statement : #{4}. Current thread: #{Thread.current}"
|
12
|
-
print "\rA very long output statement : #{5}. Current thread: #{Thread.current}"
|
13
|
-
print "\rA very long output statement : #{6}. Current thread: #{Thread.current}"
|
14
|
-
print "\rA very long output statement : #{7}. Current thread: #{Thread.current}"
|
15
|
-
print "\rA very long output statement : #{8}. Current thread: #{Thread.current}"
|
16
|
-
end
|
17
|
-
puts
|
18
|
-
}
|
19
|
-
bm.report{
|
20
|
-
i = 0
|
21
|
-
|
22
|
-
1_000.times do
|
23
|
-
Fibril do
|
24
|
-
Fibril do
|
25
|
-
print "\rA very long output statement : #{1}. Current thread: #{Thread.current}"
|
26
|
-
print "\rA very long output statement : #{2}. Current thread: #{Thread.current}"
|
27
|
-
tick
|
28
|
-
print "\rA very long output statement : #{3}. Current thread: #{Thread.current}"
|
29
|
-
print "\rA very long output statement : #{4}. Current thread: #{Thread.current}"
|
30
|
-
end
|
31
|
-
|
32
|
-
Fibril do
|
33
|
-
print "\rA very long output statement : #{5}. Current thread: #{Thread.current}"
|
34
|
-
print "\rA very long output statement : #{6}. Current thread: #{Thread.current}"
|
35
|
-
tick
|
36
|
-
print "\rA very long output statement : #{7}. Current thread: #{Thread.current}"
|
37
|
-
print "\rA very long output statement : #{8}. Current thread: #{Thread.current}"
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
puts
|
42
|
-
}
|
43
|
-
bm.report{
|
44
|
-
i = 0
|
45
|
-
1_000.times do
|
46
|
-
Thread.new do
|
47
|
-
[
|
48
|
-
Thread.new do
|
49
|
-
print "\rA very long output statement : #{1}. Current thread: #{Thread.current}"
|
50
|
-
print "\rA very long output statement : #{2}. Current thread: #{Thread.current}"
|
51
|
-
print "\rA very long output statement : #{3}. Current thread: #{Thread.current}"
|
52
|
-
print "\rA very long output statement : #{4}. Current thread: #{Thread.current}"
|
53
|
-
end,
|
54
|
-
Thread.new do
|
55
|
-
print "\rA very long output statement : #{5}. Current thread: #{Thread.current}"
|
56
|
-
print "\rA very long output statement : #{6}. Current thread: #{Thread.current}"
|
57
|
-
print "\rA very long output statement : #{7}. Current thread: #{Thread.current}"
|
58
|
-
print "\rA very long output statement : #{8}. Current thread: #{Thread.current}"
|
59
|
-
end
|
60
|
-
].each(&:join)
|
61
|
-
end.join
|
62
|
-
end
|
63
|
-
puts
|
64
|
-
}
|
65
|
-
end
|
66
|
-
|
67
|
-
# Thread.new do
|
68
|
-
# [
|
69
|
-
# Thread.new do
|
70
|
-
# print "\rBig very very very very long message 1"
|
71
|
-
# print "\rBig very very very very long message 2"
|
72
|
-
# print "\rBig very very very very long message 5"
|
73
|
-
# print "\rBig very very very very long message 6"
|
74
|
-
# end,
|
75
|
-
# Thread.new do
|
76
|
-
# print "\rBig very very very very long message 3"
|
77
|
-
# print "\rBig very very very very long message 4"
|
78
|
-
# print "\rBig very very very very long message 7"
|
79
|
-
# print "\rBig very very very very long message 8"
|
80
|
-
# end
|
81
|
-
# ].each(&:join)
|
82
|
-
# end.join
|
data/examples/example_promise.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
require_relative "../lib/fibril/loop"
|
2
|
-
|
3
|
-
pending = promise{ sleep 1; 3 }
|
4
|
-
pending2 = promise{ sleep 0.1; 4 }
|
5
|
-
|
6
|
-
fibril{
|
7
|
-
puts "First"
|
8
|
-
puts async.await(pending)
|
9
|
-
puts "First"
|
10
|
-
}
|
11
|
-
|
12
|
-
fibril{
|
13
|
-
puts "Second"
|
14
|
-
result = async.await_all pending, pending2
|
15
|
-
puts "Second"
|
16
|
-
puts "Result is #{result}"
|
17
|
-
}
|
18
|
-
|
19
|
-
fibril{
|
20
|
-
puts "Third"
|
21
|
-
puts async.await(pending2)
|
22
|
-
puts "Third"
|
23
|
-
}
|