1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/lib
normal d9beb7690f net/protocol: optimize large read case
There are several places where rbuf_consume is called with
@rbuf.size as its length arg; simplify that case by avoiding
the slow String#slice! operation in favor of a lightweight
replacement.

The following script exhibits reduced memory usage and
runtimes using the time(1) command:

	2.9s =>  2.6s
	70MB => 12 MB

---------
require 'net/http'
require 'digest/md5'
Thread.abort_on_exception = true
s = TCPServer.new('127.0.0.1', 0)
len = 1024 * 1024 * 1024
th = Thread.new do
  c = s.accept
  c.readpartial(16384)
  c.write("HTTP/1.0 200 OK\r\nContent-Length: #{len}\r\n\r\n")
  IO.copy_stream('/dev/zero', c, len)
  c.close
end

addr = s.addr
Net::HTTP.start(addr[3], addr[1]) do |http|
  http.request_get('/') do |res|
    dig = Digest::MD5.new
    res.read_body { |buf|
      dig.update(buf)
      # String#clear is important to reduce malloc overhead,
      # but most Ruby programmers don't do this :<
      buf.clear
    }
    puts dig.hexdigest
  end
end
----------

* lib/net/protocol (rbuf_consume): optimize for @rbuf.size == len
  [Feature #14268]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61602 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-01-05 02:22:23 +00:00
..
cgi
drb drb: use \A and \z 2017-12-30 12:10:43 +00:00
forwardable
irb proc.c (bind_location): Add Binding#source_location 2017-12-26 08:38:35 +00:00
matrix
net net/protocol: optimize large read case 2018-01-05 02:22:23 +00:00
optparse
racc
rdoc fix reset order. 2017-12-31 00:06:34 +00:00
rexml
rinda
rss
rubygems fix leaked fds 2017-12-25 05:54:27 +00:00
shell
unicode_normalize
uri Use string instead of regexp 2017-12-14 06:30:22 +00:00
webrick webrick 1.4.2 2017-12-24 08:38:43 +00:00
yaml
.document
abbrev.rb
base64.rb
benchmark.rb
cgi.rb
cmath.gemspec
cmath.rb
csv.gemspec Bump version to csv-1.0.0 as default gems. 2017-12-13 05:24:01 +00:00
csv.rb
debug.rb
delegate.rb
drb.rb
e2mmap.rb
English.rb
erb.rb $SAFE as a process global state. [Feature #14250] 2017-12-28 20:09:24 +00:00
fileutils.gemspec Bump up fileutils-1.0.2 2017-12-22 08:00:10 +00:00
fileutils.rb Bump up fileutils-1.0.2 2017-12-22 08:00:10 +00:00
find.rb
forwardable.rb
getoptlong.rb
ipaddr.gemspec
ipaddr.rb
irb.rb irb.rb: fix highlight 2017-12-25 07:55:25 +00:00
logger.rb * lib/logger.rb (Logger::LogDevice#open_logfile, #create_logfile): 2017-12-21 05:07:43 +00:00
matrix.rb
mkmf.rb int (*)(void) is incompatible with void* 2018-01-02 06:41:42 +00:00
monitor.rb
mutex_m.rb
observer.rb
open-uri.rb open-uri defines URI.open defined as an alias. 2017-12-21 14:15:04 +00:00
open3.rb
optionparser.rb
optparse.rb
ostruct.rb
pp.rb Requiring pp is not required now [ci skip] 2017-12-18 01:51:53 +00:00
prettyprint.rb
prime.rb
profile.rb
profiler.rb
pstore.rb
rdoc.rb Merge rdoc-6.0.1. 2017-12-23 23:33:09 +00:00
resolv-replace.rb
resolv.rb Fixed command Injection 2017-12-20 04:25:01 +00:00
rss.rb
rubygems.rb Postponing the Bundler merge. 2017-12-22 23:08:05 +00:00
scanf.gemspec
scanf.rb
securerandom.rb
set.rb
shell.rb
shellwords.rb
singleton.rb
sync.rb
tempfile.rb
thwait.rb
time.rb
timeout.rb
tmpdir.rb
tracer.rb
tsort.rb
un.rb
uri.rb
weakref.rb
webrick.rb
yaml.rb