Skip to content
  • Eric Wong's avatar
    bee5b49a
    socket: avoid arg parsing in rsock_s_accept_nonblock · bee5b49a
    Eric Wong authored
    * ext/socket/init.c (rsock_s_accept_nonblock): avoid parsing args
      [ruby-core:71439] [Feature #11339]
    * ext/socket/rubysocket.h: adjust prototype
    * ext/socket/socket.c (sock_accept_nonblock): make private
    * ext/socket/tcpserver.c (tcp_accept_nonblock): ditto
    * ext/socket/unixserver.c (unix_accept_nonblock): ditto
    * ext/socket/lib/socket.rb (Socket#accept_nonblock):
      implement as wrapper, move RDoc
      (TCPServer#accept_nonblock): ditto
      (UNIXServer#accept_nonblock): ditto
    
    target 0: a (ruby 2.3.0dev (2015-11-12 trunk 52550) [x86_64-linux])
    target 1: b (ruby 2.3.0dev (2015-11-12 avoid-kwarg-capi 52550) [x86_64-linux]
    
    -----------------------------------------------------------
    accept_nonblock
    
    require 'tempfile'
    require 'socket'
    require 'io/wait'
    nr = 500000
    Tempfile.create(%w(accept_nonblock .sock)) do |tmp|
      path = tmp.path
      File.unlink(path)
      s = UNIXServer.new(path)
      addr = Socket.sockaddr_un(path).freeze
      nr.times do
        s.accept_nonblock(exception: false)
        c = UNIXSocket.new(path)
        s.wait_readable
        s.accept_nonblock(exception: false).close
        c.close
      end
    end
    
    -----------------------------------------------------------
    raw data:
    
    [["accept_nonblock",
      [[4.807877402752638,
        4.930681671947241,
        4.738454818725586,
        4.69268161803484,
        4.684675686061382],
       [4.253904823213816,
        4.255124930292368,
        4.295955188572407,
        4.248479191213846,
        4.213303029537201]]]]
    
    Elapsed time: 45.123040065 (sec)
    -----------------------------------------------------------
    benchmark results:
    minimum results in each 5 measurements.
    Execution time (sec)
    name            a       b
    accept_nonblock   4.685   4.213
    
    Speedup ratio: compare with the result of `a' (greater is better)
    name            b
    accept_nonblock   1.112
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52601 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
    bee5b49a
    socket: avoid arg parsing in rsock_s_accept_nonblock
    Eric Wong authored
    * ext/socket/init.c (rsock_s_accept_nonblock): avoid parsing args
      [ruby-core:71439] [Feature #11339]
    * ext/socket/rubysocket.h: adjust prototype
    * ext/socket/socket.c (sock_accept_nonblock): make private
    * ext/socket/tcpserver.c (tcp_accept_nonblock): ditto
    * ext/socket/unixserver.c (unix_accept_nonblock): ditto
    * ext/socket/lib/socket.rb (Socket#accept_nonblock):
      implement as wrapper, move RDoc
      (TCPServer#accept_nonblock): ditto
      (UNIXServer#accept_nonblock): ditto
    
    target 0: a (ruby 2.3.0dev (2015-11-12 trunk 52550) [x86_64-linux])
    target 1: b (ruby 2.3.0dev (2015-11-12 avoid-kwarg-capi 52550) [x86_64-linux]
    
    -----------------------------------------------------------
    accept_nonblock
    
    require 'tempfile'
    require 'socket'
    require 'io/wait'
    nr = 500000
    Tempfile.create(%w(accept_nonblock .sock)) do |tmp|
      path = tmp.path
      File.unlink(path)
      s = UNIXServer.new(path)
      addr = Socket.sockaddr_un(path).freeze
      nr.times do
        s.accept_nonblock(exception: false)
        c = UNIXSocket.new(path)
        s.wait_readable
        s.accept_nonblock(exception: false).close
        c.close
      end
    end
    
    -----------------------------------------------------------
    raw data:
    
    [["accept_nonblock",
      [[4.807877402752638,
        4.930681671947241,
        4.738454818725586,
        4.69268161803484,
        4.684675686061382],
       [4.253904823213816,
        4.255124930292368,
        4.295955188572407,
        4.248479191213846,
        4.213303029537201]]]]
    
    Elapsed time: 45.123040065 (sec)
    -----------------------------------------------------------
    benchmark results:
    minimum results in each 5 measurements.
    Execution time (sec)
    name            a       b
    accept_nonblock   4.685   4.213
    
    Speedup ratio: compare with the result of `a' (greater is better)
    name            b
    accept_nonblock   1.112
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52601 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Loading