Issue #11242 has been updated by Nobuyoshi Nakada.

Description updated

----------------------------------------
Feature #11242: [PATCH] socket: alloa explicit buffer for recv and recv_nonblock
https://bugs.ruby-lang.org/issues/11242#change-52812

* Author: Eric Wong
* Status: Open
* Priority: Normal
* Assignee: Yukihiro Matsumoto
----------------------------------------
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)

~~~ruby
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--------------------------------
0001-socket-allow-explicit-buffer-for-recv-and-recv_nonbl.patch (7.45 KB)


-- 
https://bugs.ruby-lang.org/