Project

General

Profile

Actions

Feature #9091

closed

[PATCH] accept_nonblock supports "exception: false"

Added by normalperson (Eric Wong) over 10 years ago. Updated over 4 years ago.

Status:
Closed
Target version:
-
[ruby-core:58211]

Description

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

This is analogous to functionality found in IO#read_nonblock 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.accept_nonblock
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


Files

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0