[#87467] [Ruby trunk Bug#14841] Very rarely IO#readpartial does not raise EOFError — mofezilla@...
Issue #14841 has been reported by hirura (Hiroyuki URANISHI).
3 messages
2018/06/10
[#87515] [Ruby trunk Bug#14841] Very rarely IO#readpartial does not raise EOFError — hirura@...
Issue #14841 has been updated by hirura (Hiroyuki URANISHI).
7 messages
2018/06/19
[#87516] Re: [Ruby trunk Bug#14841] Very rarely IO#readpartial does not raise EOFError
— Eric Wong <normalperson@...>
2018/06/19
[email protected] wrote:
[#87517] Re: [Ruby trunk Bug#14841] Very rarely IO#readpartial does not raise EOFError
— Eric Wong <normalperson@...>
2018/06/19
Sorry, I left this out: If you can reproduce it again, can you
[#87519] Re: [Ruby trunk Bug#14841] Very rarely IO#readpartial does not raise EOFError
— hirura <hirura@...>
2018/06/19
Hi Eric,
[#87521] Re: [Ruby trunk Bug#14841] Very rarely IO#readpartial does not raise EOFError
— Eric Wong <normalperson@...>
2018/06/19
hirura <[email protected]> wrote:
[#87541] [Ruby trunk Feature#14859] [PATCH] implement Timeout in VM — normalperson@...
Issue #14859 has been reported by normalperson (Eric Wong).
4 messages
2018/06/21
[#87570] [Ruby trunk Feature#14859] [PATCH] implement Timeout in VM — eregontp@...
Issue #14859 has been updated by Eregon (Benoit Daloze).
4 messages
2018/06/21
[#87605] [Ruby trunk Bug#14867] Process.wait can wait for MJIT compiler process — takashikkbn@...
Issue #14867 has been reported by k0kubun (Takashi Kokubun).
3 messages
2018/06/23
[#87614] [Ruby trunk Bug#14867] Process.wait can wait for MJIT compiler process — normalperson@...
Issue #14867 has been updated by normalperson (Eric Wong).
4 messages
2018/06/23
[#87631] [Ruby trunk Bug#14867] Process.wait can wait for MJIT compiler process — takashikkbn@...
Issue #14867 has been updated by k0kubun (Takashi Kokubun).
5 messages
2018/06/25
[#87635] Re: [Ruby trunk Bug#14867] Process.wait can wait for MJIT compiler process
— Eric Wong <normalperson@...>
2018/06/25
[email protected] wrote:
[#87665] [Ruby trunk Bug#14867] Process.wait can wait for MJIT compiler process — eregontp@...
Issue #14867 has been updated by Eregon (Benoit Daloze).
4 messages
2018/06/28
[#87710] [Ruby trunk Bug#14867] Process.wait can wait for MJIT compiler process — Greg.mpls@...
Issue #14867 has been updated by MSP-Greg (Greg L).
3 messages
2018/06/30
[ruby-core:87483] Re: [Ruby trunk Feature#14736] Thread selector for flexible cooperative fiber based concurrency
From:
Eric Wong <normalperson@...>
Date:
2018-06-13 00:58:26 UTC
List:
ruby-core #87483
[email protected] wrote: > I've been playing around with port scanners. Implemented in Go > (goroutines), Python (asyncio) and Ruby (async). > > I wrote up the results here: > https://github.com/socketry/async-await/tree/master/examples/port_scanner Attached is the implementation for Threadlet/auto-fiber/wachamacallit rebased against ruby trunk r63641: https://80x24.org/spew/[email protected]/raw On a busy Linux VM, Threadlet was close to your Go implementation in speed (timing results were unstable, however) and Ruby async was around 3x slower behind (even with timing instabilities). I kept on getting errors with the Python3 version ("Event loop is closed") so I never let it finish I needed to deal with EPIPE because the system I tested on had RDS (16385) enabled in the kernel which was triggering EPIPE (I don't know Go or Python): ``` diff --git a/examples/port_scanner/port_scanner.go b/examples/port_scanner/port_scanner.go index 45f2d1c..ad0f049 100755 --- a/examples/port_scanner/port_scanner.go +++ b/examples/port_scanner/port_scanner.go @@ -55,7 +55,7 @@ func checkPortOpen(ip string, port int, timeout time.Duration) { } else if strings.Contains(err.Error(), "refused") { // fmt.Println(port, "closed", err.Error()) } else { - panic(err) + fmt.Println(port, "err", err.Error()) } return } diff --git a/examples/port_scanner/port_scanner.py b/examples/port_scanner/port_scanner.py index 372f0b3..ca9d41a 100755 --- a/examples/port_scanner/port_scanner.py +++ b/examples/port_scanner/port_scanner.py @@ -22,6 +22,8 @@ class PortScanner: # print("{} closed".format(port)) except asyncio.TimeoutError: print("{} timeout".format(port)) + except SystemError: + print("{} error".format(port)) def start(self, timeout=1.0): self.loop.run_until_complete(asyncio.gather( diff --git a/examples/port_scanner/port_scanner.rb b/examples/port_scanner/port_scanner.rb index 0e4160e..3ac0109 100755 --- a/examples/port_scanner/port_scanner.rb +++ b/examples/port_scanner/port_scanner.rb @@ -25,6 +25,8 @@ class PortScanner # puts "#{port} closed" rescue Async::TimeoutError puts "#{port} timeout" + rescue SystemCallError => e + puts "#{port} #{e.message}" end async def start(timeout = 1.0) ``` Unsubscribe: <mailto:[email protected]?subject=unsubscribe> <http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>
Attachments (1)
port_scanner_threadlet.rb
(925 Bytes, application/x-sh)