[#56965] [ruby-trunk - Bug #8852][Open] Synology build of ruby-2.0.0-p247 is failing — "barbecuesteve (Steve Sparks)" <sparks@...>

12 messages 2013/09/02

[#57051] [ruby-trunk - Bug #8872][Open] Case statements do not honor a refinement of the '===' method — "jconley88 (Jon Conley)" <schnozberries@...>

21 messages 2013/09/07

[#57058] [ruby-trunk - Bug #8875][Open] Select is not usable with SSLSocket — "headius (Charles Nutter)" <headius@...>

11 messages 2013/09/07

[#57074] [ruby-trunk - Bug #8879][Open] String#to_r fails after moving ruby to other OSX system — "mpapis (Michal Papis)" <mpapis@...>

12 messages 2013/09/08

[#57092] [ruby-trunk - Bug #8883][Open] Rational canonicalization unexpectedly converts to Fixnum — "melquiades (Paul Cantrell)" <cantrell@...>

16 messages 2013/09/09

[#57109] [ruby-trunk - Bug #8886][Open] TracePoint API inconsistence when raise used — deivid (David Rodríguez) <deivid.rodriguez@...>

14 messages 2013/09/10

[#57111] [ruby-trunk - Feature #8887][Open] min(n), max(n), min_by(n), max_by(n) — "akr (Akira Tanaka)" <akr@...>

13 messages 2013/09/10

[#57131] [ruby-trunk - Feature #8895][Open] Destructuring Assignment for Hash — "chendo (Jack Chen)" <ruby-lang@...>

19 messages 2013/09/11

[#57186] [ruby-trunk - Feature #8909][Open] Expand "f" frozen suffix to literal arrays and hashes — "headius (Charles Nutter)" <headius@...>

37 messages 2013/09/14

[#57262] [ruby-trunk - Feature #8921][Open] Allow select, reject, etc to accept a regex — "kyledecot (Kyle Decot)" <kyle.decot@...>

13 messages 2013/09/18

[#57273] [ruby-trunk - Feature #8923][Open] Frozen nil/true/false — "ko1 (Koichi Sasada)" <redmine@...>

13 messages 2013/09/19

[#57353] [ruby-trunk - Feature #8948][Open] Frozen regex — "sawa (Tsuyoshi Sawada)" <sawadatsuyoshi@...>

19 messages 2013/09/24

[#57385] [ruby-trunk - Bug #8953][Open] `str =~ /pattern/` does not call =~ method if (1) str is a String, (2) /pattern/ is a Regexp literal — "gfx (Goro Fuji)" <gfuji@...>

12 messages 2013/09/26

[#57396] [ruby-trunk - Feature #8956][Open] Allow hash members delimited by \n inside of {} — "adamdunson (Adam Dunson)" <adam@...>

20 messages 2013/09/26

[ruby-core:57435] [ruby-trunk - Bug #8208][Rejected] Raise cached exceptions for nonblocking IO to avoid allocation/stack-copying costs

From: "headius (Charles Nutter)" <headius@...>
Date: 2013-09-27 11:15:25 UTC
List: ruby-core #57435
Issue #8208 has been updated by headius (Charles Nutter).

Status changed from Open to Rejected

https://bugs.ruby-lang.org/issues/5138 has been accepted in a slightly altered form, so I think perhaps this can be rejected. Since it is now possible to use read_nonblock with no exception raise, my proposal is unnecessary.
----------------------------------------
Bug #8208: Raise cached exceptions for nonblocking IO to avoid allocation/stack-copying costs
https://bugs.ruby-lang.org/issues/8208#change-42041

Author: headius (Charles Nutter)
Status: Rejected
Priority: Normal
Assignee: 
Category: 
Target version: 
ruby -v: 2.0.0
Backport: 


Currently, all nonblocking IO APIs raise exceptions when the IO channel cannot perform the requested read or write without blocking. This adds a tremendous performance hit to nonblocking IO, since raising an exception requires both allocating the exception object and saving off the backtrace information from the call stack.

Two changes could reduce this cost:

1. Don't provide a full backtrace for these exceptions, or only provide it in a debug or verbose modes. 99% of the rescuers of these exceptions don't ever use the backtrace, so it's wasted overhead.

2. Always raise a cached exception. This completely avoids all allocation costs for nonblocking operations that fail.

JRuby does #1 in JRuby 1.7 series, but does not do #2. I will work on a patch for MRI to do both #1 and #2.

The benefit of this change would be that nonblocking IO has zero wasted overhead. The down side would be that the exceptions raised do not have a useful backtrace unless debug or verbose.

If we did this change, we would not have to introduce a separate API for nonblocking IO that doesn't raise exceptions.

Thoughts?




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

In This Thread

Prev Next