From: Phil Tomson Date: 2006-05-28T05:33:23+09:00 Subject: Re: Ruby Threads... On 5/27/06, ara.t.howard@noaa.gov wrote: > On Sat, 27 May 2006, ReggW wrote: > > > Francis Cianfrocca wrote: > > > >> It seems to me that Ruby's green-thread implementation is perfectly > >> adequate > >> for most programmers' requirements. > > > > But the problem is that it doesn't take advantage of these new multi-core > > processor that are now starting to become the standard machines being sold > > (at least for my customers). > > it's a small problem. here is some code which starts two processes, three if > you count the parent. both run in separate processes using drb as the ipc > layer to make the communication painless. because the code uses drb the com is > simple. because it uses multiple processes it allows the kernel to migrate > them to different cpus. the cost is about 100 lines of pure-ruby (the slave > lib). notice how easy it is for parent to communicate with child and for > childrent to communicate with each other: > > harp:~ > cat a.rb > require 'slave' > require 'yaml' > > class ProcessA > def initialize(b) @b = b end > def process(n) @b.process(n * n) end > def pid() Process.pid end > end > > class ProcessB > def process(n) n + 6 end > def pid() Process.pid end > end > > b = Slave.new(ProcessB.new).object > a = Slave.new(ProcessA.new(b)).object > > y 'a.pid' => a.pid > y 'b.pid' => b.pid > > y 'answer' => a.process(6) > > > harp:~ > ruby a.rb > --- > a.pid: 15142 > --- > b.pid: 15141 > --- > answer: 42 > > > this is one of those things that allows one to consider designs that would be > untenable in other languages. obviously using this approach it would be > trivial to setup a job that spawned 16 intercommunicating proccess, something > which would be absurd to code in c. > Is your Slave code available? (perhaps someone asked later; I miss the newsgroup where I would be able to more easily tell if they did ) BTW: Just curious: Why are you require'ing Yaml? Are you marshalling in Drb with Yaml instead of the builtin marshalling? If so, why? Is it faster? (I wouldn't think so) Phil I really miss the gateway...