[#6115] Ruby 1.8.3: YAML.dump/load cannot handle Bignum — akira yamada / やまだあきら <akira@...>
[#6119] Packaging BOF on Friday the 14th? — Austin Ziegler <halostatue@...>
(Crossposted to both ruby-core and rubygems-developers for the benefit
[#6135] ObjectSpace.each_object, but not Symbols? — TRANS <transfire@...>
I added some state to Symbol:
Hi,
Hi,
[#6143] — Christophe Poucet <christophe.poucet@...>
Hello,
Hi,
On Wed, 5 Oct 2005 nobu.nokada@softhome.net wrote:
Hi,
On Wed, 5 Oct 2005, nobuyoshi nakada wrote:
[#6161] On NullClass or FalseClass#method_missing — TRANS <transfire@...>
Hi--
[#6162] Concerning shared flag — Christophe Poucet <christophe.poucet@...>
Hello,
>>>>> "C" == Christophe Poucet <christophe.poucet@gmail.com> writes:
Hello,
>>>>> "C" == Christophe Poucet <christophe.poucet@gmail.com> writes:
[#6188] yield and call not identical? — "David A. Black" <dblack@...>
Hi --
[#6199] Kernel rdoc HTML file not being created when rdoc is run on 1.8.3 — James Britt <ruby@...>
When 1.8.3 came out, I grabbed the source and ran rdoc on it. After
On Sun, Oct 09, 2005 at 12:41:02AM +0900, James Britt wrote:
Doug Kearns wrote:
H.Yamamoto wrote:
On 10/19/05, why the lucky stiff <ruby-core@whytheluckystiff.net> wrote:
[#6213] extend and super -- I cannot understand why this behavior — TRANS <transfire@...>
module Q
On Tue, 11 Oct 2005, TRANS wrote:
On 10/10/05, Mathieu Bouchard <matju@artengine.ca> wrote:
On Tue, 11 Oct 2005, TRANS wrote:
On 10/10/05, Mathieu Bouchard <matju@artengine.ca> wrote:
[#6235] Keyword arguments in Rite — Daniel Schierbeck <daniel.schierbeck@...>
Hello everybody! I'm new to this list, so please don't flame me if what
Daniel Schierbeck wrote:
[#6251] RubyGems, upstream releases and idempotence of packaging — Mauricio Fern疣dez <mfp@...>
[sorry for the very late reply; I left this message in +postponed and forgot
On 10/13/05, Mauricio Fern疣dez <mfp@acm.org> wrote:
On Thu, Oct 13, 2005 at 08:55:41PM +0900, Gavin Sinclair wrote:
[#6262] Re: A concrete solution to RubyGems' repackageability problems — Gavin Sinclair <gsinclair@...>
On 10/13/05, Mauricio Fern疣dez <mfp@acm.org> wrote:
[#6282] Wilderness: Need Code to invoke ELTS_SHARED response — "Charles E. Thornton" <ruby-core@...>
Testing the My Object Dump and I am trying to cause creation
On Fri, Oct 14, 2005 at 05:04:59PM +0900, Charles E. Thornton wrote:
Mauricio Fern疣dez wrote:
On Oct 14, 2005, at 12:43 PM, Charles E. Thornton wrote:
On Sun, Oct 16, 2005 at 01:34:13PM +0900, Charles Mills wrote:
Mauricio Fern疣dez wrote:
[#6284] Ruby 1.8.3, Gems, Rake and Syck — TRANS <transfire@...>
George Moschovitis tried to send me a gem to try out and it would not install.
On 10/14/05, Ryan Davis <ryand-ruby@zenspider.com> wrote:
[#6315] Integer#** weirdness — Peter Vanbroekhoven <calamitates@...>
Hello,
[#6338] Help/Ruby 1.8.3/HP-UX/[BUG] Bus Error — tad.bochan@...
Hi ... need help ...
[#6358] Handle prompts with newlines in irb auto-indentation mode — noreply@...
Bugs item #2705, was opened at 2005-10-23 23:07
Hi,
[#6362] CGI read_multipart implementaion can create Tempfiles for files less than 10KB — noreply@...
Bugs item #2708, was opened at 2005-10-24 15:44
On Mon, 24 Oct 2005 noreply@rubyforge.org wrote:
[#6364] lib/rational.rb documentation — Gavin Sinclair <gsinclair@...>
Hi,
[#6365] Time for built-in Rational and Complex classes? — Gavin Sinclair <gsinclair@...>
There has been some support for, but no comment on, RCR #260 ("Make
On Mon, 24 Oct 2005, Gavin Sinclair wrote:
On Oct 24, 2005, at 7:14 AM, Ara.T.Howard wrote:
On Wed, 26 Oct 2005, Charles Mills wrote:
On 10/26/05, Mathieu Bouchard <matju@artengine.ca> wrote:
On Thu, 27 Oct 2005, Charles Mills wrote:
On 10/27/05, Mathieu Bouchard <matju@artengine.ca> wrote:
[#6373] instance_eval/instance_exec discussion — Daniel Amelang <daniel.amelang@...>
Introduction:
Hi,
[#6376] Crash in Tk demo of Ruby 1.9.0 CVS — Jean-Claude Arbaut <jcarbaut@...>
I tried the demos in /ruby/ext/tk/sample/demos-en/widget
[#6389] [PATCH] 1.8.3 ruby.c doesn't compile on OS X due to missing char **environ — noreply@...
Bugs item #2715, was opened at 2005-10-24 23:01
Hi,
[#6391] Threading performance — Wink Saville <wink@...>
Hello all,
[#6396] Nested Exception — Yohanes Santoso <ysantoso-rubycore@...>
Would you accept a patch to provide nested Exception?
[#6402] Pathname.exists?() — James Edward Gray II <james@...>
Pathname supports the legacy exist?() method, but not the current
[#6405] Re: [PATCH] Pathname.exists?() — "Berger, Daniel" <Daniel.Berger@...>
On 10/25/05, Berger, Daniel <Daniel.Berger@qwest.com> wrote:
On 10/26/05, TRANS <transfire@gmail.com> wrote:
On 10/25/05, Gavin Sinclair <gsinclair@gmail.com> wrote:
On Oct 25, 2005, at 11:28 AM, TRANS wrote:
On Wed, 26 Oct 2005, Eric Hodel wrote:
On 10/26/05, Ara.T.Howard <Ara.T.Howard@noaa.gov> wrote:
On 10/25/05, Gavin Sinclair <gsinclair@gmail.com> wrote:
[#6419] Refactoring eval.c into eval.c, thread.c, thread.h & eval.h — Wink Saville <wink@...>
Hello,
[#6427] Re: Wilderness: I am working of a TAGS Extension - We Have One? — "Berger, Daniel" <Daniel.Berger@...>
> -----Original Message-----
[#6430] PStore Documentation — James Edward Gray II <james@...>
The attached patch completely documents the PStore library. Please
James Edward Gray II wrote:
[#6442] Wilderness: I Have formatted README.EXT into an HTML Document — "Charles E. Thornton" <ruby-core@...>
I have taken README.EXT (English Version Only) and have reformatted
Hi,
Charles E. Thornton wrote:
[#6455] Wilderness: OK - Let us Try to sending it (not as a reply) — "Charles E. Thornton" <ruby-core@...>
I am sorry - I don't understand this problem
[#6469] csv.rb a start on refactoring. — Hugh Sasse <hgs@...>
For a database application I found using CSV to be rather slow.
On Oct 28, 2005, at 8:53 AM, Ara.T.Howard wrote:
On Fri, 28 Oct 2005, James Edward Gray II wrote:
On Oct 28, 2005, at 9:58 AM, Ara.T.Howard wrote:
On Sat, 29 Oct 2005, James Edward Gray II wrote:
On Oct 28, 2005, at 8:25 PM, Ara.T.Howard wrote:
On Sat, 29 Oct 2005, James Edward Gray II wrote:
On Oct 28, 2005, at 8:43 PM, Ara.T.Howard wrote:
On Oct 28, 2005, at 8:43 PM, Ara.T.Howard wrote:
On Oct 28, 2005, at 10:06 PM, James Edward Gray II wrote:
On Sun, 30 Oct 2005, James Edward Gray II wrote:
On Oct 29, 2005, at 12:11 PM, Ara.T.Howard wrote:
On Mon, 31 Oct 2005, James Edward Gray II wrote:
I've decided to create a FasterCSV library, based on the code we
On Mon, 31 Oct 2005, James Edward Gray II wrote:
-----BEGIN PGP SIGNED MESSAGE-----
On Mon, 31 Oct 2005, NAKAMURA, Hiroshi wrote:
-----BEGIN PGP SIGNED MESSAGE-----
On Tue, 1 Nov 2005, NAKAMURA, Hiroshi wrote:
-----BEGIN PGP SIGNED MESSAGE-----
On Wed, 2 Nov 2005, NAKAMURA, Hiroshi wrote:
-----BEGIN PGP SIGNED MESSAGE-----
On Oct 29, 2005, at 12:11 PM, Ara.T.Howard wrote:
On Tue, 1 Nov 2005, James Edward Gray II wrote:
On Oct 31, 2005, at 11:59 AM, Ara.T.Howard wrote:
[#6508] characters (and small strings) in ruby 2.0 — Eric Mahurin <eric.mahurin@...>
In ruby 2.0, the current plan is to for a character to be represented as a
Threading performance
Hello all,
I would like to first apologize in advance for posting to the core as a
newbie, but this seems like the right place. Anyway, I'm interested in
adding light weight asynchronous messaging to Ruby. My idea is to create
messaging components which are composed of a thread and a queue with
messages are sent between components via the Queue. This allows for
significant parallelism but decreased issues thread safety issues as
each message is processed by the component one at a time. Of course any
shared objects would have thread safety issues, but if a component only
operates on its own objects the issues should be significantly reduced.
Currently we have implemented a similar system in C for a consumer audio
product and it has worked OK, but I would like to use a higher level
language and Ruby looks like a good. But performance is a concern,
especially since we are using 100MHZ ARM7's.
Anyway, I've done a trial implementation and noticed that the as I
increased the number of messaging components the number of messages per
second was dropping. So I look into why and have done some measurements
using the following program:
-----------------------
require 'thread'
def prt(s)
STDOUT.print s
STDOUT.flush
end
ts = []
que = []
count = ARGV[0].to_i
prt "#{count} threads being made\n"
count.times { |i|
ts[i] = Thread.new {
que[i] = Queue.new
que[i].deq
}
}
prt "Make background thread\n"
counter = 0
background = Thread.new {
while true
counter += 1
end
}
prt "sleeping 5 seconds ..."
sleep(5)
prt "\nDone counter=#{counter}\n"
background.kill
background.join
prt "Waiting for threads to end\n"
count.times { |i|
que[i].enq("done")
}
count.times { |i|
ts[i].join
}
-----------------------
The program creates a number of threads which do nothing except wait for
a message plus one background thread which increments a counter. I get
the following results:
Cygwin 2.4ghz 1GB ram P4
ruby 1.9.0 (2005-10-23) [i386-cygwin]
0: Done counter=13589805
10: Done counter=13572629
500: Done counter= 8916522
1000: Done counter= 5344578
5000: Done counter= 270010
Cygwin 2.4ghz 1GB ram P4
ruby 1.8.2 (2004-12-25) [i386-mswin32]
0: Done counter=11302589
10: Done counter=11211705
500: Done counter= 6886940
1000: Done counter= 3537857
5000: Done counter= 238339
Linux amd64 3200+ 500MB ram
ruby 1.9.0 (2005-10-23) [x86_64-linux]
0: Done counter=20029982
10: Done counter=19431449
500: Done counter=19475618
1000: Done counter=19004082
5000: Done counter=18612325
As you can see, with cygwin on both ruby 1.8.2 and 1.9.0 as the number
of threads increase the value counter attains over the 5 seconds
decreases significantly. But we see that for Linux on the amd64 it still
decreases but much less severely. I also ran it on my 800MHZ PowerBook
on OS X and it to exhibited the Linux behavior, although the count was
much less, but the absolute number isn't critical (at the moment anyway).
I then investigated why and it appears to be for two reasons. The
fundamental reason for the decreasing performance for all
implementations appears to me to be the algorithms in
rb_thread_schedule. In this routine the algorithm to choose the next
thread to run looks at every thread in the system at least twice and
possibly as many as 5 times. Thus, as the number of threads increases
the performance decreases. But, why is this less of a problem for Linux
than cygwin? I was guessing that the problem had to do with how often
rb_thread_schedule was being called. I looked deeper at the code and
background scheduling appears to be accomplished for a thread such as
background by the rb_eval routine invoking the macro CHECK_INTS defined
in rubysig.h.
As most of you probably know CHECK_INTS has two implementations, one
uses a counter, rb_thread_tick, which causes rb_thread_schedule to be
called every 500 times CHECK_INTS is invoked. The other causes
rb_thread_schedule to be run approximately every 10ms. The counter
technique is used by cygwin and the timer technique is used by Linux. As
a quick test, I changed the value of THREAD_TICK from 500 to 5000 and
sure enough the performance for cygwin increased significantly.
I then looked at the where and how HAVE_SETITIMER and _THREAD_SAFE, the
defines that control the timer usage and found that if I added
_THREAD_SAFE to my 1.9.0 config.h the performance on cygwin approached
what I saw under Linux:
Cygwin 2.4ghz 1GB ram P4 with DEFINE "_THREAD_SAFE"
ruby 1.9.0 (2005-10-24) [i386-cygwin]
0: Done counter=16975581
10: Done counter=16741738
500: Done counter=16621442
1000: Done counter=16333656
5000: Done counter=13899214
Soooooooo:
1) What are the issues using _THREAD_SAFE for cygwin?
2) If I were to create a more efficient implementation of
rb_thread_schedule, shooting for O(1), would that be interesting to anyone?
3) To do a more efficient implementation I've already taken the first
step and split eval.c into 4 files eval.h, thread.c and thread.h, is
anyone interested in these files? Of course they would need to be
evaluated by some experts and probably changed, but I think refactoring
out the threading code makes sense. Note: Evan originally suggested this
to me when we talked at the Ruby Conference.
4) Is anyone interested in a light weight asynchronous messaging for
Ruby? By light weight I mean the performance decrease due to message
passing is low (use binary for marshaling) and by asynchronous I mean
that sending a message never blocks nor returns a value. Messages are
placed on a queue that the receiver will processes at a time of its
choosing.
Cheers,
Wink