Skip to content

Commit f803dda

Browse files
committed
Disambiguate nil on methods with timeout
1 parent 8a4ea83 commit f803dda

File tree

9 files changed

+515
-417
lines changed

9 files changed

+515
-417
lines changed

docs-source/channel.out.md

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@ since the channel is full.
1515
threads = Array.new(3) { |i| Thread.new { ch.push message: i } }
1616
sleep 0.01 # let the threads run
1717
threads
18-
# => [#<Thread:[email protected]:14 sleep_forever>,
18+
# => [#<Thread:[email protected]:14 dead>,
1919
# #<Thread:[email protected]:14 dead>,
20-
# #<Thread:[email protected]:14 dead>]
20+
# #<Thread:[email protected]:14 sleep_forever>]
2121
```
2222

2323
When message is popped the last thread continues and finishes as well.
2424

2525
```ruby
26-
ch.pop # => {:message=>2}
26+
ch.pop # => {:message=>0}
2727
threads.map(&:join)
2828
# => [#<Thread:[email protected]:14 dead>,
2929
# #<Thread:[email protected]:14 dead>,
@@ -45,7 +45,7 @@ threads
4545
ch.push message: 3
4646
# => #<Concurrent::Promises::Channel:0x000002 capacity taken 0 of 2>
4747
threads.map(&:value)
48-
# => [{:message=>1}, {:message=>0}, {:message=>3}]
48+
# => [{:message=>1}, {:message=>2}, {:message=>3}]
4949
```
5050

5151
### Promises integration
@@ -148,7 +148,7 @@ ch.push 2, 0.01 # => true
148148
ch.push 3, 0.01 # => false
149149
ch.pop 0.01 # => 1
150150
ch.pop 0.01 # => 2
151-
ch.pop 0.01 # => nil
151+
ch.pop 0.01 # => [true, nil, nil]
152152
```
153153

154154
### Backpressure
@@ -206,15 +206,15 @@ log
206206
# "consumer 0 got 0. payload 0 from producer 0",
207207
# "producer 0 pushing 3",
208208
# "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",
209211
# "producer 1 pushing 1",
210-
# "consumer 1 got 0. payload 2 from producer 0",
211-
# "consumer 3 got 0. payload 0 from producer 1",
212212
# "producer 1 pushing 2",
213-
# "consumer 0 got 1. payload 3 from producer 0",
214-
# "consumer 1 got 1. payload 1 from producer 1",
215-
# "consumer 3 got 1. payload 2 from producer 1",
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",
216216
# "producer 1 pushing 3",
217-
# "consumer 2 got 1. payload 3 from producer 1"]
217+
# "consumer 0 got 1. payload 3 from producer 1"]
218218
```
219219

220220
The producers are much faster than consumers
@@ -269,19 +269,19 @@ consumers.map(&:value!) # => [:done, :done, :done, :done]
269269
log
270270
# => ["producer 0 pushing 0",
271271
# "producer 1 pushing 0",
272+
# "consumer 0 got 0. payload 0 from producer 0",
272273
# "producer 0 pushing 1",
273274
# "producer 1 pushing 1",
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",
275+
# "consumer 2 got 0. payload 0 from producer 1",
276+
# "consumer 3 got 0. payload 1 from producer 0",
277277
# "producer 0 pushing 2",
278-
# "consumer 3 got 0. payload 1 from producer 1",
279-
# "producer 1 pushing 2",
280278
# "producer 0 pushing 3",
279+
# "consumer 1 got 0. payload 1 from producer 1",
280+
# "producer 1 pushing 2",
281281
# "producer 1 pushing 3",
282282
# "consumer 0 got 1. payload 2 from producer 0",
283-
# "consumer 2 got 1. payload 2 from producer 1",
284283
# "consumer 3 got 1. payload 3 from producer 0",
284+
# "consumer 2 got 1. payload 2 from producer 1",
285285
# "consumer 1 got 1. payload 3 from producer 1"]
286286
```
287287

docs/master/Concurrent/Promises/Channel.html

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -125,14 +125,14 @@ <h2>Overview</h2><div class="docstring">
125125
<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_threads'>threads</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../Array.html" title="Concurrent::Array (class)">Array</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='int'>3</span><span class='rparen'>)</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_i'>i</span><span class='op'>|</span> <span class='const'>Thread</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span> <span class='lbrace'>{</span> <span class='id identifier rubyid_ch'>ch</span><span class='period'>.</span><span class='id identifier rubyid_push'>push</span> <span class='label'>message:</span> <span class='id identifier rubyid_i'>i</span> <span class='rbrace'>}</span> <span class='rbrace'>}</span>
126126
<span class='id identifier rubyid_sleep'>sleep</span> <span class='float'>0.01</span> <span class='comment'># let the threads run
127127
</span><span class='id identifier rubyid_threads'>threads</span>
128-
<span class='comment'># =&gt; [#&lt;Thread:[email protected]:14 sleep_forever&gt;,
128+
<span class='comment'># =&gt; [#&lt;Thread:[email protected]:14 dead&gt;,
129129
</span><span class='comment'># #&lt;Thread:[email protected]:14 dead&gt;,
130-
</span><span class='comment'># #&lt;Thread:[email protected]:14 dead&gt;]
130+
</span><span class='comment'># #&lt;Thread:[email protected]:14 sleep_forever&gt;]
131131
</span></code></pre>
132132

133133
<p>When message is popped the last thread continues and finishes as well.</p>
134134

135-
<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_ch'>ch</span><span class='period'>.</span><span class='id identifier rubyid_pop'>pop</span> <span class='comment'># =&gt; {:message=&gt;2}
135+
<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_ch'>ch</span><span class='period'>.</span><span class='id identifier rubyid_pop'>pop</span> <span class='comment'># =&gt; {:message=&gt;0}
136136
</span><span class='id identifier rubyid_threads'>threads</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='symbol'>:join</span><span class='rparen'>)</span>
137137
<span class='comment'># =&gt; [#&lt;Thread:[email protected]:14 dead&gt;,
138138
</span><span class='comment'># #&lt;Thread:[email protected]:14 dead&gt;,
@@ -153,7 +153,7 @@ <h2>Overview</h2><div class="docstring">
153153
</span><span class='id identifier rubyid_ch'>ch</span><span class='period'>.</span><span class='id identifier rubyid_push'>push</span> <span class='label'>message:</span> <span class='int'>3</span>
154154
<span class='comment'># =&gt; #&lt;Concurrent::Promises::Channel:0x000002 capacity taken 0 of 2&gt;
155155
</span><span class='id identifier rubyid_threads'>threads</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='symbol'>:value</span><span class='rparen'>)</span>
156-
<span class='comment'># =&gt; [{:message=&gt;1}, {:message=&gt;0}, {:message=&gt;3}]
156+
<span class='comment'># =&gt; [{:message=&gt;1}, {:message=&gt;2}, {:message=&gt;3}]
157157
</span></code></pre>
158158

159159
<h3>Promises integration</h3>
@@ -253,7 +253,7 @@ <h3>Timeouts</h3>
253253
</span><span class='id identifier rubyid_ch'>ch</span><span class='period'>.</span><span class='id identifier rubyid_push'>push</span> <span class='int'>3</span><span class='comma'>,</span> <span class='float'>0.01</span> <span class='comment'># =&gt; false
254254
</span><span class='id identifier rubyid_ch'>ch</span><span class='period'>.</span><span class='id identifier rubyid_pop'>pop</span> <span class='float'>0.01</span> <span class='comment'># =&gt; 1
255255
</span><span class='id identifier rubyid_ch'>ch</span><span class='period'>.</span><span class='id identifier rubyid_pop'>pop</span> <span class='float'>0.01</span> <span class='comment'># =&gt; 2
256-
</span><span class='id identifier rubyid_ch'>ch</span><span class='period'>.</span><span class='id identifier rubyid_pop'>pop</span> <span class='float'>0.01</span> <span class='comment'># =&gt; nil
256+
</span><span class='id identifier rubyid_ch'>ch</span><span class='period'>.</span><span class='id identifier rubyid_pop'>pop</span> <span class='float'>0.01</span> <span class='comment'># =&gt; [true, nil, nil]
257257
</span></code></pre>
258258

259259
<h3>Backpressure</h3>
@@ -310,15 +310,15 @@ <h3>Backpressure</h3>
310310
</span><span class='comment'># &quot;consumer 0 got 0. payload 0 from producer 0&quot;,
311311
</span><span class='comment'># &quot;producer 0 pushing 3&quot;,
312312
</span><span class='comment'># &quot;consumer 2 got 0. payload 1 from producer 0&quot;,
313+
</span><span class='comment'># &quot;consumer 3 got 0. payload 2 from producer 0&quot;,
314+
</span><span class='comment'># &quot;consumer 1 got 0. payload 0 from producer 1&quot;,
313315
</span><span class='comment'># &quot;producer 1 pushing 1&quot;,
314-
</span><span class='comment'># &quot;consumer 1 got 0. payload 2 from producer 0&quot;,
315-
</span><span class='comment'># &quot;consumer 3 got 0. payload 0 from producer 1&quot;,
316316
</span><span class='comment'># &quot;producer 1 pushing 2&quot;,
317-
</span><span class='comment'># &quot;consumer 0 got 1. payload 3 from producer 0&quot;,
318-
</span><span class='comment'># &quot;consumer 1 got 1. payload 1 from producer 1&quot;,
319-
</span><span class='comment'># &quot;consumer 3 got 1. payload 2 from producer 1&quot;,
317+
</span><span class='comment'># &quot;consumer 2 got 1. payload 3 from producer 0&quot;,
318+
</span><span class='comment'># &quot;consumer 3 got 1. payload 1 from producer 1&quot;,
319+
</span><span class='comment'># &quot;consumer 1 got 1. payload 2 from producer 1&quot;,
320320
</span><span class='comment'># &quot;producer 1 pushing 3&quot;,
321-
</span><span class='comment'># &quot;consumer 2 got 1. payload 3 from producer 1&quot;]
321+
</span><span class='comment'># &quot;consumer 0 got 1. payload 3 from producer 1&quot;]
322322
</span></code></pre>
323323

324324
<p>The producers are much faster than consumers
@@ -372,19 +372,19 @@ <h3>Backpressure</h3>
372372
</span><span class='id identifier rubyid_log'>log</span>
373373
<span class='comment'># =&gt; [&quot;producer 0 pushing 0&quot;,
374374
</span><span class='comment'># &quot;producer 1 pushing 0&quot;,
375+
</span><span class='comment'># &quot;consumer 0 got 0. payload 0 from producer 0&quot;,
375376
</span><span class='comment'># &quot;producer 0 pushing 1&quot;,
376377
</span><span class='comment'># &quot;producer 1 pushing 1&quot;,
377-
</span><span class='comment'># &quot;consumer 0 got 0. payload 0 from producer 0&quot;,
378-
</span><span class='comment'># &quot;consumer 1 got 0. payload 0 from producer 1&quot;,
379-
</span><span class='comment'># &quot;consumer 2 got 0. payload 1 from producer 0&quot;,
378+
</span><span class='comment'># &quot;consumer 2 got 0. payload 0 from producer 1&quot;,
379+
</span><span class='comment'># &quot;consumer 3 got 0. payload 1 from producer 0&quot;,
380380
</span><span class='comment'># &quot;producer 0 pushing 2&quot;,
381-
</span><span class='comment'># &quot;consumer 3 got 0. payload 1 from producer 1&quot;,
382-
</span><span class='comment'># &quot;producer 1 pushing 2&quot;,
383381
</span><span class='comment'># &quot;producer 0 pushing 3&quot;,
382+
</span><span class='comment'># &quot;consumer 1 got 0. payload 1 from producer 1&quot;,
383+
</span><span class='comment'># &quot;producer 1 pushing 2&quot;,
384384
</span><span class='comment'># &quot;producer 1 pushing 3&quot;,
385385
</span><span class='comment'># &quot;consumer 0 got 1. payload 2 from producer 0&quot;,
386-
</span><span class='comment'># &quot;consumer 2 got 1. payload 2 from producer 1&quot;,
387386
</span><span class='comment'># &quot;consumer 3 got 1. payload 3 from producer 0&quot;,
387+
</span><span class='comment'># &quot;consumer 2 got 1. payload 2 from producer 1&quot;,
388388
</span><span class='comment'># &quot;consumer 1 got 1. payload 3 from producer 1&quot;]
389389
</span></code></pre>
390390

0 commit comments

Comments
 (0)