From: "ko1 (Koichi Sasada)" Date: 2013-08-29T18:54:58+09:00 Subject: [ruby-core:56861] [ruby-trunk - Feature #3620] Add Queue, SIzedQueue and ConditionVariable implementations in C in addition to ruby ones Issue #3620 has been updated by ko1 (Koichi Sasada). File thread.c added I rewrite to use T_STRUCT instead of T_DATA (attached). Matsushita-san: Could you check it? Issue: With ext/thraed/thread.c instead of lib/thread.rb, we can't install ruby itself. (1) rbinstall.rb is invoked with miniruby (2) rbinstall.rb requires rubygems.rb (3) rubygems.rb requires lib/rubygems/core_ext/kernel_require.rb (4) lib/rubygems/core_ext/kernel_require.rb requires lib/monitor.rb (5) lib/monitor.rb requires thread.rb Problems are (a) miniruby can't require extension libraries (b) rbinstall.rb is not invoked with -I option Easy way to solve these problem is use rbinstall.rb by ./ruby instead of ./miniruby with -I option. Another solution is to embed thread.rb features (CV and Queue) as embeded classes. ---------------------------------------- Feature #3620: Add Queue, SIzedQueue and ConditionVariable implementations in C in addition to ruby ones https://bugs.ruby-lang.org/issues/3620#change-41408 Author: panaggio (Ricardo Panaggio) Status: Assigned Priority: Normal Assignee: ko1 (Koichi Sasada) Category: ext Target version: next minor =begin Queue, SizedQueue and ConditionVariable are important synchronization primitives and are nowadays implemented in Ruby. Attached patch (initiated by myself and heavily enriched by Nobu) contains these sync primitives implemented in C, which makes them faster (see [1] for the benchmark's code): Rehearsal ------------------------------------------------- Q#push 1.590000 0.010000 1.600000 ( 1.605502) T#push 0.600000 0.010000 0.610000 ( 0.630444) Q#pop 4.390000 0.000000 4.390000 ( 4.389781) T#pop 0.580000 0.000000 0.580000 ( 0.578918) Q#empty? 0.480000 0.000000 0.480000 ( 0.484305) T#empty? 0.360000 0.000000 0.360000 ( 0.358559) Q#clear 1.210000 0.000000 1.210000 ( 1.214494) T#clear 0.600000 0.000000 0.600000 ( 0.588611) Q#size 0.370000 0.000000 0.370000 ( 0.365587) T#size 0.350000 0.000000 0.350000 ( 0.356985) Q#num_waiting 0.380000 0.000000 0.380000 ( 0.379199) T#num_waiting 0.370000 0.000000 0.370000 ( 0.368075) --------------------------------------- total: 11.300000sec It has already been discussed on ruby-core (see ruby-core:31100). This patch is one of the deliverables of my RubySoC project (slot #17): "Improving Ruby's Synchronization Primitives and Core Libraries" [2,3] [1] http://github.com/panaggio/rubysoc-2010/blob/master/benchmarks/queue.rb [2] http://pastebin.com/viSnfqe6 [3] http://rubysoc.org/projects =end -- http://bugs.ruby-lang.org/