Skip to content
  • Eric Wong's avatar
    1e14126b
    Dir.empty? releases GVL · 1e14126b
    Eric Wong authored
    This converts all slow syscalls in the Dir.empty? implementation
    to release GVL.  We avoid unnecessarily GVL release and
    reacquire for each slow call (opendir, readdir, closedir) and
    instead only release and acquire the GVL once in the common
    case.
    
    Benchmark results show a small degradation in single-threaded
    performance:
    Execution time (sec)
    name	trunk	built
    dir_empty_p	0.689	0.758
    
    Speedup ratio: compare with the result of `trunk' (greater is better)
    name	built
    dir_empty_p	0.909
    
    * dir.c (rb_gc_for_fd_with_gvl): new function
      (nogvl_dir_empty_p): ditto
      (dir_s_empty_p): use new functions to release GVL
    * benchmark/bm_dir_empty_p.rb: new benchmark
      [ruby-core:83071] [Feature #13958]
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60111 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
    1e14126b
    Dir.empty? releases GVL
    Eric Wong authored
    This converts all slow syscalls in the Dir.empty? implementation
    to release GVL.  We avoid unnecessarily GVL release and
    reacquire for each slow call (opendir, readdir, closedir) and
    instead only release and acquire the GVL once in the common
    case.
    
    Benchmark results show a small degradation in single-threaded
    performance:
    Execution time (sec)
    name	trunk	built
    dir_empty_p	0.689	0.758
    
    Speedup ratio: compare with the result of `trunk' (greater is better)
    name	built
    dir_empty_p	0.909
    
    * dir.c (rb_gc_for_fd_with_gvl): new function
      (nogvl_dir_empty_p): ditto
      (dir_s_empty_p): use new functions to release GVL
    * benchmark/bm_dir_empty_p.rb: new benchmark
      [ruby-core:83071] [Feature #13958]
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60111 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Loading