Project

General

Profile

Actions

Feature #11242

closed

[PATCH] socket: alloa explicit buffer for recv and recv_nonblock

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

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

Description

Note, this relies on [Feature #11229]

This reduces GC overhead and makes the API more consistent
with IO#read and IO#read_nonblock.

Benchmark results:

    |     user  |   system  |    total |       real

--------|----------:|----------:|---------:|-----------:
alloc | 0.130000 | 0.280000 | 0.410000 |( 0.420656)
extbuf | 0.100000 | 0.220000 | 0.320000 |( 0.318708)

require 'socket'
require 'benchmark'
nr = 100000
msg = ' ' * 16384
size = msg.bytesize
buf = ' ' * size
UNIXSocket.pair(:DGRAM) do |a, b|
  Benchmark.bmbm do |x|
    x.report('alloc') do
      nr.times do
        b.send(msg, 0)
        a.recv(size, 0)
      end
    end

    x.report('extbuf') do
      nr.times do
        b.send(msg, 0)
        a.recv(size, 0, buf)
      end
    end
  end
end

Files

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0