Bug #9091

[PATCH] accept_nonblock supports "exception: false"

Added by Eric Wong 5 months ago. Updated 3 months ago.

[ruby-core:58211]
Status:Open
Priority:Low
Assignee:Akira Tanaka
Category:ext
Target version:current: 2.2.0
ruby -v:ruby 2.1.0dev (2013-11-07 trunk 43560) [x86_64-linux] Backport:1.9.3: UNKNOWN, 2.0.0: UNKNOWN

Description

git pull git://bogomips.org/ruby.git accept_nonblock-noraise

This is analogous to functionality found in IO#readnonblock and
IO#wait
nonblock. Raising exceptions for common failures on
non-blocking servers is expensive and makes $DEBUG too noisy.

Benchmark results:
user system total real
default 2.530000 0.970000 3.500000 ( 3.492550)
exception: false 0.820000 0.910000 1.730000 ( 1.741821)
exception: false (cached arg) 0.670000 0.910000 1.580000 ( 1.583128)

--------------------- benchmark script ------------------------
require 'socket'
require 'benchmark'
s = TCPServer.new("localhost", 0)
nr = 1000000
Benchmark.bmbm do |x|
x.report("default") do
nr.times do
begin
s.acceptnonblock
rescue IO::WaitReadable
end
end
end
x.report("exception: false") do
nr.times do
begin
s.accept
nonblock(exception: false)
rescue IO::WaitReadable
abort "should not raise"
end
end
end
x.report("exception: false (cached arg)") do
arg = { exception: false }
nr.times do
begin
s.accept_nonblock(arg)
rescue IO::WaitReadable
abort "should not raise"
end
end
end
end

I also plan on doing others like recv,send,connect, too

0001-accept_nonblock-supports-exception-false.patch Magnifier (9.49 KB) Eric Wong, 11/07/2013 12:33 PM

History

#1 Updated by Hiroshi SHIBATA 3 months ago

  • Target version changed from 2.1.0 to current: 2.2.0

Also available in: Atom PDF