[#87773] timer thread [was Re: [ruby-alerts:7905] failure alert on trunk-asserts@silicon-docker (NG (r63844))] — Eric Wong <normalperson@...>
> test_all <main>: warning: pthread_create failed for timer: Resource temporarily unavailable, scheduling broken
[#87836] [Ruby trunk Bug#14898] test/lib/test/unit/parallel.rb: TestSocket#test_timestamp stuck sometimes — ko1@...
Issue #14898 has been reported by ko1 (Koichi Sasada).
[email protected] wrote:
On 2018/07/06 18:47, Eric Wong wrote:
[#87847] undefined symbol: mjit_init_p — Leam Hall <leamhall@...>
I pulled Ruby trunk on 3 Jul and am now getting errors similar to the
QXMgSSB0b2xkIHlvdSwgYG1ha2UgaW5zdGFsbGAgaXMgbmVlZGVkIHRvIG1ha2UgUnVieSB3b3Jr
T25lIG1vcmUgcmVhc29uIGZvciBodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMTM2
[#87986] [Ruby trunk Feature#14915] Deprecate String#crypt, move implementation to string/crypt — mame@...
Issue #14915 has been updated by mame (Yusuke Endoh).
[email protected] wrote:
normalperson (Eric Wong) wrote:
[#88088] [Ruby trunk Misc#14937] [PATCH] thread_pthread: lazy-spawn timer-thread only on contention — normalperson@...
Issue #14937 has been reported by normalperson (Eric Wong).
[#88104] [Ruby trunk Bug#14898] test/lib/test/unit/parallel.rb: TestSocket#test_timestamp stuck sometimes — ko1@...
Issue #14898 has been updated by ko1 (Koichi Sasada).
[#88173] [Ruby trunk Bug#14950] r64109 thread.c: move ppoll wrapper before thread_pthread.c - Windows compile failure - thread.c — Greg.mpls@...
Issue #14950 has been reported by MSP-Greg (Greg L).
[#88189] [Ruby trunk Bug#14950] r64109 thread.c: move ppoll wrapper before thread_pthread.c - Windows compile failure - thread.c — nobu@...
Issue #14950 has been updated by nobu (Nobuyoshi Nakada).
[#88199] [Ruby trunk Misc#14937] [PATCH] thread_pthread: lazy-spawn timer-thread only on contention — takashikkbn@...
Issue #14937 has been updated by k0kubun (Takashi Kokubun).
[email protected] wrote:
> yet, sky3 had a failure at
> http://ci.rvm.jp/results/trunk@P895/1173951
> > http://ci.rvm.jp/results/trunk@P895/1173951
[ruby-core:87807] [Ruby trunk Feature#14736] Thread selector for flexible cooperative fiber based concurrency
Issue #14736 has been updated by ioquatix (Samuel Williams).
For the first case, you naturally can't call Fiber.yield in that context... but this works:
```
#!/usr/bin/env ruby
require 'fiber'
fiber = Fiber.new do
def aga; yield 1; Fiber.yield 4; yield 8; end
puts to_enum(:aga).to_a
end
value = fiber.resume
puts "Got #{value}"
while fiber.alive?
fiber.resume
end
# Prints:
# Got 4
# 1
# 8
```
This also works:
```
#!/usr/bin/env ruby
require 'fiber'
fiber = Fiber.new do
def aga; yield 1; Fiber.yield 4; yield 8; end
e = to_enum(:aga)
puts e.next
puts e.next
puts e.next
end
value = fiber.resume
puts "Got #{value.inspect}"
while fiber.alive?
fiber.resume
end
# 1
# 4
# 8
# Got nil
```
The semantics of `Fiber.yield` from within the enumerator block depend on how it's being used. That's not something I was aware of. I see that it fails if you try to do this:
```
#!/usr/bin/env ruby
$LOAD_PATH << File.expand_path("../../lib", __dir__)
require 'async'
require 'async/io/stream'
require 'async/io/host_endpoint'
require 'async/io/protocol/line'
class Lines < Async::IO::Protocol::Line
def each
return to_enum unless block_given?
while line = read_line
yield line
end
end
end
input = Lines.new(
Async::IO::Stream.new(
Async::IO::Generic.new($stdin)
)
)
Async.run do
# This works:
# input.each do |line|
# puts "... #{line}"
# end
# This doesn't:
enumerator = input.each
while line = enumerator.next
puts "... #{line}"
end
end
```
I can imagine, if you don't know the underlying task is asynchronous, that this might cause some frustration, fortunately the error is reasonably clear in this instance.
The problem is the nested fiber is not created in an `Async::Task`. I believe that with this PR in place, it would be possible to avoid this, because ALL Fiber created on the thread with a selector is asynchronous, so it shouldn't be a problem. I am interested in working further on this PR, and this is an interesting test case. Perhaps I will see if it can work or not.
----------------------------------------
Feature #14736: Thread selector for flexible cooperative fiber based concurrency
https://bugs.ruby-lang.org/issues/14736#change-72824
* Author: ioquatix (Samuel Williams)
* Status: Open
* Priority: Normal
* Assignee:
* Target version:
----------------------------------------
Ruby concurrency can be greatly enhanced by concurrent, deterministic IO.
Fibers have been shown many times to be a great abstraction for this purpose. The retain normal code flow and don't require any kind of Thread synchronisation. They are enjoyable to write code with because you don't have to concern yourself with thread synchronisation or other complicated issues.
The basic idea is that if some operation would block, it yields the Fiber, and other Fibers within the thread can continue to execute.
There are a number of ways to implement this. Here is a proof of concept to amend the existing `rb_io_wait_readable`/`rb_io_wait_writable`.
https://github.com/ruby/ruby/pull/1870
This design minimally affects the Ruby implementation and allows flexibility for selector implementation. With a small amount of work, we can support EventMachine (65 million downloads), NIO4r (21 million downloads). It would be trivial to back port.
This PR isn't complete but I am seeking feedback. If it's a good idea, I will do my best to see it through to completion, including support for EventMachine and NIO4r.
---Files--------------------------------
port_scanner_threadlet.rb (925 Bytes)
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:[email protected]?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>