@@ -45,7 +45,7 @@ threads
45
45
ch.push message: 3
46
46
# => #<Concurrent::Promises::Channel:0x000002 capacity taken 0 of 2>
47
47
threads.map(& :value )
48
- # => [{:message=>1 }, {:message=>2 }, {:message=>3}]
48
+ # => [{:message=>2 }, {:message=>1 }, {:message=>3}]
49
49
```
50
50
51
51
### Promises integration
@@ -57,8 +57,8 @@ therefore all operations can be represented as futures.
57
57
ch = Concurrent ::Promises ::Channel .new 2
58
58
# => #<Concurrent::Promises::Channel:0x000009 capacity taken 0 of 2>
59
59
push_operations = Array .new (3 ) { |i | ch.push_op message: i }
60
- # => [#<Concurrent::Promises::Future:0x00000a fulfilled>,
61
- # #<Concurrent::Promises::Future:0x00000b fulfilled>,
60
+ # => [#<Concurrent::Promises::Future:0x00000a fulfilled with #<Concurrent::Promises::Channel:0x000009 capacity taken 2 of 2> >,
61
+ # #<Concurrent::Promises::Future:0x00000b fulfilled with #<Concurrent::Promises::Channel:0x000009 capacity taken 2 of 2> >,
62
62
# #<Concurrent::Promises::ResolvableFuture:0x00000c pending>]
63
63
```
64
64
@@ -78,8 +78,8 @@ push_operations.map(&:value!)
78
78
# #<Concurrent::Promises::Channel:0x000009 capacity taken 2 of 2>]
79
79
80
80
pop_operations = Array .new (3 ) { |i | ch.pop_op }
81
- # => [#<Concurrent::Promises::ResolvableFuture:0x00000d fulfilled>,
82
- # #<Concurrent::Promises::ResolvableFuture:0x00000e fulfilled>,
81
+ # => [#<Concurrent::Promises::ResolvableFuture:0x00000d fulfilled with {:message=>1} >,
82
+ # #<Concurrent::Promises::ResolvableFuture:0x00000e fulfilled with {:message=>2} >,
83
83
# #<Concurrent::Promises::ResolvableFuture:0x00000f pending>]
84
84
ch.push message: 3 # (push|pop) can be freely mixed with (push_o|pop_op)
85
85
pop_operations.map(& :value )
@@ -148,7 +148,7 @@ ch.push 2, 0.01 # => true
148
148
ch.push 3 , 0.01 # => false
149
149
ch.pop 0.01 # => 1
150
150
ch.pop 0.01 # => 2
151
- ch.pop 0.01 # => [true, nil, nil]
151
+ ch.pop 0.01 # => nil
152
152
```
153
153
154
154
### Backpressure
@@ -204,17 +204,17 @@ log
204
204
# "producer 0 pushing 2",
205
205
# "producer 1 pushing 0",
206
206
# "consumer 0 got 0. payload 0 from producer 0",
207
+ # "consumer 1 got 0. payload 1 from producer 0",
208
+ # "consumer 2 got 0. payload 2 from producer 0",
209
+ # "consumer 3 got 0. payload 0 from producer 1",
207
210
# "producer 0 pushing 3",
208
- # "consumer 2 got 0. payload 1 from producer 0",
209
- # "consumer 3 got 0. payload 2 from producer 0",
210
- # "consumer 1 got 0. payload 0 from producer 1",
211
211
# "producer 1 pushing 1",
212
212
# "producer 1 pushing 2",
213
- # "consumer 2 got 1. payload 3 from producer 0",
214
- # "consumer 3 got 1. payload 1 from producer 1",
215
- # "consumer 1 got 1. payload 2 from producer 1",
213
+ # "consumer 0 got 1. payload 3 from producer 0",
214
+ # "consumer 1 got 1. payload 1 from producer 1",
215
+ # "consumer 2 got 1. payload 2 from producer 1",
216
216
# "producer 1 pushing 3",
217
- # "consumer 0 got 1. payload 3 from producer 1"]
217
+ # "consumer 3 got 1. payload 3 from producer 1"]
218
218
```
219
219
220
220
The producers are much faster than consumers
@@ -269,20 +269,20 @@ consumers.map(&:value!) # => [:done, :done, :done, :done]
269
269
log
270
270
# => ["producer 0 pushing 0",
271
271
# "producer 1 pushing 0",
272
- # "consumer 0 got 0. payload 0 from producer 0",
273
272
# "producer 0 pushing 1",
274
273
# "producer 1 pushing 1",
275
- # "consumer 2 got 0. payload 0 from producer 1",
276
- # "consumer 3 got 0. payload 1 from producer 0",
274
+ # "consumer 0 got 0. payload 0 from producer 0",
275
+ # "consumer 1 got 0. payload 0 from producer 1",
276
+ # "consumer 2 got 0. payload 1 from producer 0",
277
277
# "producer 0 pushing 2",
278
- # "producer 0 pushing 3",
279
- # "consumer 1 got 0. payload 1 from producer 1",
278
+ # "consumer 3 got 0. payload 1 from producer 1",
280
279
# "producer 1 pushing 2",
280
+ # "producer 0 pushing 3",
281
281
# "producer 1 pushing 3",
282
+ # "consumer 3 got 1. payload 3 from producer 1",
282
283
# "consumer 0 got 1. payload 2 from producer 0",
283
- # "consumer 3 got 1. payload 3 from producer 0",
284
- # "consumer 2 got 1. payload 2 from producer 1",
285
- # "consumer 1 got 1. payload 3 from producer 1"]
284
+ # "consumer 1 got 1. payload 2 from producer 1",
285
+ # "consumer 2 got 1. payload 3 from producer 0"]
286
286
```
287
287
288
288
### Synchronization of workers by passing a value
@@ -309,5 +309,5 @@ thread.value # => :v1
309
309
# the push operation resolves as a pairing pop is called
310
310
channel.pop # => :v2
311
311
push
312
- # => #<Concurrent::Promises::ResolvableFuture:0x000023 fulfilled>
312
+ # => #<Concurrent::Promises::ResolvableFuture:0x000023 fulfilled with #<Concurrent::Promises::Channel:0x000021 capacity taken 0 of 0> >
313
313
```
0 commit comments