From: Eric Wong <normalperson@...>
Date: 2017-06-14T02:49:31+00:00
Subject: [ruby-core:81674] Re: [Ruby trunk Feature#13618] [PATCH] auto fiber schedule for rb_wait_for_single_fd and rb_waitpid

samuel@oriontransfer.org wrote:
> Does Ruby `File.read` and `File.stat` (and others) release the GVL? Otherwise, the performance benefit of multiple threads in this specific case is irrelevant. While I agree with you when writing high performance servers in C/C++, it might not be directly relevant to Ruby as it currently stands.

File.read does.   File.stat does not, at the moment.  I tried
it a while back but the GVL is expensive to release for hot
cache situations(*).

File.open, IO.copy_stream, IO#write, IO#read, readpartial, sysread,
syswrite all release GVL, too.

In particular, IO.copy_stream is great for large, parallel
transfers to/from high-latency storage.


(*) the cost of GVL for quick ops is a big reason I want to get rid of it

    But yeah, maybe the small regression from releasing GVL is
    acceptable for now with File.stat.  It's better than getting
    stufk on NFS or slow disks.

    File.rename, File.unlink, most Dir methods all have the same
    problem with slow storage, too.  We already pay the price
    for small regressions when releasing GVL in current cases,
    so maybe those can be GVL release points.

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>