From: Eric Wong Date: 2011-12-17T10:00:59+09:00 Subject: [ruby-core:41702] [ruby-trunk - Feature #3620] Add Queue, SIzedQueue and ConditionVariable implementations in C in addition to ruby ones Issue #3620 has been updated by Eric Wong. ping? The subject of Queue performance came up again in: http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/391324 ---------------------------------------- Feature #3620: Add Queue, SIzedQueue and ConditionVariable implementations in C in addition to ruby ones http://redmine.ruby-lang.org/issues/3620 Author: Ricardo Panaggio Status: Open Priority: Normal Assignee: Category: ext Target version: =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://redmine.ruby-lang.org