Project

General

Profile

Actions

Feature #3620

closed

Add Queue, SIzedQueue and ConditionVariable implementations in C in addition to ruby ones

Added by panaggio (Ricardo Panaggio) almost 12 years ago. Updated almost 9 years ago.

Status:
Closed
Priority:
Normal
Target version:
[ruby-core:31513]

Description

=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


Files

final-queue.patch (18 KB) final-queue.patch patch with proposed alterations: Queue, SizedQueue and ConditionVariable in C panaggio (Ricardo Panaggio), 07/28/2010 02:51 AM
final_queue_without_mutex.diff (16.7 KB) final_queue_without_mutex.diff final_queue patch without using mutex (relying on GVL) funny_falcon (Yura Sokolov), 06/26/2012 04:18 PM
patch.diff (24.3 KB) patch.diff bug fixed final_queue_without_mutex.diff Glass_saga (Masaki Matsushita), 05/17/2013 10:59 PM
patch2.diff (24.4 KB) patch2.diff using rb_funcall2() Glass_saga (Masaki Matsushita), 05/22/2013 09:07 PM
thread.c (12.4 KB) thread.c ko1 (Koichi Sasada), 08/29/2013 06:54 PM
patch3.diff (23 KB) patch3.diff Glass_saga (Masaki Matsushita), 09/05/2013 08:52 PM
Actions

Also available in: Atom PDF