[#66079] gc_sweep(): unknown data type 48 — Mauricio Fern疣dez <batsman.geo@...>

15 messages 2003/03/01
[#66082] Re: [BUG] gc_sweep(): unknown data type 48 — nobu.nokada@... 2003/03/01

Hi,

[#66085] Re: [BUG] gc_sweep(): unknown data type 48 — Mauricio Fern疣dez <batsman.geo@...> 2003/03/01

On Sat, Mar 01, 2003 at 07:26:58PM +0900, nobu.nokada@softhome.net wrote:

[#66088] Anything like Class::DBI from Perl — pw-googlegroups@... (Peter Wilkinson)

We've been doing some work using Class::DBI in Perl which makes access

17 messages 2003/03/01

[#66217] Prolly a simple question — <ghost-no-spam@...>

Sorry if these questions have come up before, but google searching hasn't

20 messages 2003/03/03

[#66245] TCPSocket delay problem — Seth Kurtzberg <seth@...>

Matz,

23 messages 2003/03/04

[#66269] OSCON — ptkwt@...1.aracnet.com (Phil Tomson)

For those coming to OSCON this year...

18 messages 2003/03/04

[#66315] system command expansion after PTY.spawn — Christian von Mueffling <cvm@...>

Hi!

13 messages 2003/03/05

[#66330] cookies in eruby mod_ruby — Daniel Bretoi <lists@...>

Can someone explain how to set/delete cookies using mod_ruby (eruby)?

13 messages 2003/03/06

[#66332] Russian Ruby resource and Ruby Course — leikind@... (Yuri Leikind)

Hi all,

19 messages 2003/03/06

[#66392] DRB and threads — Brian Candler <B.Candler@...>

I wonder if anyone can give me some hints on the interactions between dRuby

22 messages 2003/03/06
[#66417] Re: DRB and threads — "Robert Klemme" <bob.news@...> 2003/03/07

[#66421] Re: DRB and threads — Brian Candler <B.Candler@...> 2003/03/07

On Fri, Mar 07, 2003 at 07:15:29PM +0900, Robert Klemme wrote:

[#66449] Re: DRB and threads — ahoward <ahoward@...> 2003/03/08

On Fri, 7 Mar 2003, Brian Candler wrote:

[#66454] Re: DRB and threads — Brian Candler <B.Candler@...> 2003/03/08

On Sat, Mar 08, 2003 at 11:38:31AM +0900, ahoward wrote:

[#66440] Solving the 'strange language' documentation problem — "Josef 'Jupp' Schugt" <jupp@...>

Dear Rubyists,

18 messages 2003/03/07

[#66466] I'm to give short talk on ruby at work, anybody have material/outlines they can donate/ — Sam Roberts <sroberts@...>

10 messages 2003/03/08

[#66469] What character sets are available in Ruby ? — peterjohannsen@... (pj)

There is a Ruby FAQ which I read that said that Ruby only supports

17 messages 2003/03/08

[#66522] Thinking of learning Ruby — "anonimous" <n.thomp@...>

I have abour 3 or 4 years experience with Linux, and about 2 years

45 messages 2003/03/10

[#66530] Protocols — "Ray Capozzi" <Ray_Capozzi@...>

Is there a preferred set of ruby libraries for client/server solutions? As

26 messages 2003/03/10
[#66533] Re: Protocols — "MikkelFJ" <mikkelfj-anti-spam@...> 2003/03/10

[#66548] Re: Protocols — <jbritt@...> 2003/03/10

> "Ray Capozzi" <Ray_Capozzi@hotmail.com> wrote in message

[#66633] Threads and DRb — "Hal E. Fulton" <hal9000@...>

I changed the title here because this is not

16 messages 2003/03/10

[#66805] Ruby newbie uninstall question? — "Colin Coates" <colin@...>

Hello Everyone,

12 messages 2003/03/12

[#66850] Ruby / Eiffel ? — <cailloux@...>

Hello evry body

23 messages 2003/03/13

[#66906] Syck 0.08 -- Next-generation of YAML.rb — why the lucky stiff <yaml-core@...>

citizens,

21 messages 2003/03/14
[#66931] Re: [ANN] Syck 0.08 -- Next-generation of YAML.rb — Richard Kilmer <rich@...> 2003/03/14

Works great under OS X and Ruby 1.8!

[#66927] dynamically create a method — Rudolf Polzer <abuse@...>

Is there a possiblilty to dynamically create a method, like this?

14 messages 2003/03/14

[#66974] The onion truck strikes again ... Announcing rake — Jim Weirich <jweirich@...>

Ok, let me state from the beginning that I never intended to write this

25 messages 2003/03/15

[#67013] ANN: vcard 0.1 - a vCard decoding library — Sam Roberts <sroberts@...>

http://raa.ruby-lang.org/list.rhtml?name=vcard

10 messages 2003/03/15

[#67071] How do I get irb to use readline, (with OS X)? — Sam Roberts <sroberts@...>

I'm sure I saw something about this somewhere, but I've been searching,

12 messages 2003/03/16

[#67074] ANN: Madeleine 0.1 — Anders Bengtsson <ndrsbngtssn@...>

28 messages 2003/03/16
[#67109] Re: ANN: Madeleine 0.1 — Brian Candler <B.Candler@...> 2003/03/17

On Mon, Mar 17, 2003 at 07:00:35AM +0900, Anders Bengtsson wrote:

[#67115] Re: ANN: Madeleine 0.1 — Anders Bengtsson <ndrsbngtssn@...> 2003/03/17

--- Brian Candler <B.Candler@pobox.com> skrev:

[#67124] Re: ANN: Madeleine 0.1 — Brian Candler <B.Candler@...> 2003/03/17

On Mon, Mar 17, 2003 at 11:37:56PM +0900, Anders Bengtsson wrote:

[#67128] Re: ANN: Madeleine 0.1 — Anders Bengtsson <ndrsbngtssn@...> 2003/03/17

--- Brian Candler <B.Candler@pobox.com> wrote:

[#67222] OT: XML too hard (YAML opportunity?) — ptkwt@...1.aracnet.com (Phil Tomson)

On /. today there is a discussion about a weblog entry by an XML

27 messages 2003/03/18
[#67239] Re: XML too hard (YAML opportunity?) — <jbritt@...> 2003/03/19

> On /. today there is a discussion about a weblog entry by an XML

[#67302] Frequency of announcements — "Josef 'Jupp' Schugt" <jupp@...>

Hi!

14 messages 2003/03/19

[#67304] Strong advantages over Python — Greg McIntyre <greg@...>

Hi lovely Ruby people,

111 messages 2003/03/20
[#67408] Re: Strong advantages over Python — Greg McIntyre <greg@...> 2003/03/21

Good list. Amalgamated with http://www.ruby-lang.org/en/whats.html, it

[#67416] Re: Strong advantages over Python — Paul Prescod <paul@...> 2003/03/21

Greg McIntyre wrote:

[#67663] Ruby lecture slides (was Strong advantages over Python) — Greg McIntyre <greg@...> 2003/03/23

Thanks to all of you who answered and cleared up some of my perceptions

[#67675] Re: Ruby lecture slides (was Strong advantages over Python) — Paul Prescod <paul@...> 2003/03/23

Greg McIntyre wrote:

[#67685] Re: Ruby lecture slides (was Strong advantages over Python) — Mark Wilson <mwilson13@...> 2003/03/24

[#67697] Re: Ruby lecture slides (was Strong advantages over Python) — Greg McIntyre <greg@...> 2003/03/24

Mark Wilson <mwilson13@cox.net> wrote:

[#67346] class level Exception handling — Xiangrong Fang <xrfang@...>

Hi

12 messages 2003/03/20

[#67366] Newbie question: 9/5=1 ? — Thomas Jollans <nospam@...>

while learning ruby i wanted to program a simple fahrenheit to celsius

16 messages 2003/03/20

[#67387] Ruby tutorial download — Daniel Carrera <dcarrera@...>

Someone asked that I make the ruby tutorial available for download,

13 messages 2003/03/20

[#67415] Proposal: new operator: '<-' (for assignments) — ptkwt@...1.aracnet.com (Phil Tomson)

15 messages 2003/03/21

[#67446] Ruby & LaTeX — Walter Cazzola <cazzola@...>

Dear Ruby Experts,

19 messages 2003/03/21

[#67514] Rake problem? — manfred.lotz@... (Manfred)

Hi,

15 messages 2003/03/21

[#67546] Expression results — debitsch@... (Rasmus)

Hello,

22 messages 2003/03/21
[#67549] Re: Expression results — "Hal E. Fulton" <hal9000@...> 2003/03/21

----- Original Message -----

[#67634] exiting a loop — Daniel Carrera <dcarrera@...>

Hello,

31 messages 2003/03/23

[#67711] Iterate over two lists in parallel — Gavin Sinclair <gsinclair@...>

On Monday, March 24, 2003, 1:54:53 PM, Julian wrote:

33 messages 2003/03/24

[#67915] Conditionally make a method private? — Jeremy <thinker5555@...>

Hello again!

13 messages 2003/03/26

[#67961] What are the differences between Ruby's blocks and Python's lambdas? — sdieselil@... (sdieselil)

See subject.

22 messages 2003/03/26
[#67966] Re: What are the differences between Ruby's blocks and Python's lambdas? — "Chris Pine" <nemo@...> 2003/03/26

As was mentioned, Ruby has lambdas, but they are commonly called "procs".

[#67967] Re: What are the differences between Ruby's blocks and Python's lambdas? — Mauricio Fern疣dez <batsman.geo@...> 2003/03/26

On Thu, Mar 27, 2003 at 12:50:04AM +0900, Chris Pine wrote:

[#67975] Re: What are the differences between Ruby's blocks and Python's lambdas? — Paul Brannan <pbrannan@...> 2003/03/26

On Thu, Mar 27, 2003 at 01:01:25AM +0900, Mauricio Fern疣dez wrote:

[#67983] Re: What are the differences between Ruby's blocks and Python's lambdas? — Mauricio Fern疣dez <batsman.geo@...> 2003/03/26

On Thu, Mar 27, 2003 at 02:20:48AM +0900, Paul Brannan wrote:

[#67986] Re: What are the differences between Ruby's blocks and Python's lambdas? — Paul Brannan <pbrannan@...> 2003/03/26

On Thu, Mar 27, 2003 at 04:40:40AM +0900, Mauricio Fern疣dez wrote:

[#68082] Array question — walter@...

Any one know why Array.join can't take a code block and join that

28 messages 2003/03/27

[#68198] Announce: RHDL-0.4.2 (Ruby HDL) an agile HDL — ptkwt@...1.aracnet.com (Phil Tomson)

RHDL 0.4.2 is now available at:

12 messages 2003/03/29

[#68199] Ruby 1.6.8 vs Ruby 1.8.0 preview 2 - benchmarks — djberg96@... (Daniel Berger)

Hi all,

11 messages 2003/03/29

[#68201] Weighted random selection -- how would you do this? — "Hal E. Fulton" <hal9000@...>

Here's a little question for you.

24 messages 2003/03/29

[#68254] Saving code written during an irb session — Bil Kleb <W.L.Kleb@...>

OK, so I admit: I'm stupid. How do I save the code I've generated

19 messages 2003/03/30

[#68271] Hard coded newline characters — David King Landrith <dave@...>

There are a surprising number of ruby source files that have newline

24 messages 2003/03/30
[#68286] Re: Hard coded newline characters — nobu.nokada@... 2003/03/31

Hi,

[#68328] Re: Hard coded newline characters — David King Landrith <dave@...> 2003/03/31

On Sunday, March 30, 2003, at 08:06 PM, nobu.nokada@softhome.net wrote:

[#68318] syntax highlighting problem in vim — "Josef 'Jupp' Schugt" <jupp@...>

Hi!

16 messages 2003/03/31
[#68325] Re: syntax highlighting problem in vim — KONTRA Gergely <kgergely@...> 2003/03/31

Negative. It is correct for me. How is it displayed at you?

Re: Threads and DRb

From: "Robert" <bob.news@...>
Date: 2003-03-13 08:17:51 UTC
List: ruby-talk #66854
Brian,

I slept over it and came up with this pool implementation (see attachment).
The facade part is still missing, but I've no experience with drb so I guess
that's the part where you can give better input.

"Brian Candler" <B.Candler@pobox.com> schrieb im Newsbeitrag
news:20030312210421.GA52600@uk.tiscali.com...
> On Wed, Mar 12, 2003 at 06:13:46PM +0900, Robert Klemme wrote:
> > Things I don't understand:
> >
> > Why do you introduce method alive?  Are there conditions under which
> > an instance in the pool can die?  If not, you could check sanity when
> > you take back an instance and put it into the pool.
>
> Sure, I didn't see much difference in checking sanity before or after the
> call though. The instance in the pool itself can't "die", but it could get
> into a state where it is easier just to reinitialise it.
>
> Thinking about this again, maybe it makes sense to check sanity only after
> an exception has been raised. In that case, the sanity check can be
> something reasonably active: e.g.
>
>   def alive?
>     @dbh.select_one("select 123 from dual") == 123
>   end
>
> If that returns false or an exception, then you can be pretty sure that
the
> instance has a problem, and it needs re-initialising.

Sounds reasonable but not feasible with a separated pool.  My pool does it
on insertion and retrieval.  Maybe this should be changed if we assume that
instances don't change their state in the pool.  Then checking on reinsert
should be sufficient.

One could adhere to the pattern that an instance is only put back into the
pool if the method did not throw.  This is easy achieved by changing the
pattern

obj = pool.get
begin
  obj.do()
ensure
  pool.put obj
end

to

obj = pool.get
obj.do()
pool.put obj

which will omit the put() in case of an exception.

> Perhaps even cleverer would be to have a separate thread for putting new
> objects into the pool, which means you can rate-limit them to one every
> second (say)
>
> > Why do you rededine the set of methods to invoke method_missing?  This
> > happens anyway if a method is not implemented.
>
> It doesn't work with DRb. DRb validates method calls explicitly and raises
> an exception if they are not present: in drb/drb.rb see
> 'check_insecure_method', which is called from its own 'method_missing'
>
> So to keep DRb happy, the pool object has to have real methods
corresponding
> to the ones in the pool objects.
>
> You don't need to list the methods explicitly in the facade in cases where
> method_missing is sufficient though.

Ah!  I see.

> > Room for improvement:
> >
> > I'd change the design in a way that the pool and the facade are
> > separated.  This is orthogonal functionality and by extracting the
> > pool functionality to another class the design becomes cleaner and
> > more modular, hence improved reusability.
>
> Sounds reasonable, how do you suggest: (facade) has-a (pool) ?
> I can't think of a good way to express that though.

Well, just hand the pool over to the facade on construction or create it in
initialize().

> > The @poolnotempty.wait(@mutex) should be in a loop because with only
> > one element in the pool and two threads waiting and both are signalled
> > only one can fetch the element and the other has to continue waiting.
> > Normally this can't occur in your example
>
> Even if it did, wouldn't that be the correct behaviour? i.e. two threads
are
> waiting on an empty pool, the cv is signalled when one object is put back
> into the pool (which allows one of the waiting threads to take it back out
> again). When a second object is put back into the pool the cv will be
> signalled again, so the second waiting thread will be woken. Or am I
missing
> a sequence which causes this to fail?

No, as I said this can't happen in your example.  But the more general
pattern is to repeat the check.  That's not too costly and you avoid strange
errors if the condition variable is used for other signals. (I can't see
such an application yet, and maybe I'm too much influenced by the Java
notify() and notifyAll()...)

I think the situation changes with a separated pool: In that case you want
to limit the number of threads that is concurrently running.  In that case
the pool does not need a condition variable (see my example).  Instead the
facade instance needs a semaphore which is initialized to the max amount of
threads and decremented on entry and incremented on exit of a method.

> > You can look at some stuff I put here for threading purposes:
> > http://www.rubygarden.org/ruby?MultiThreading
>
> Nice introduction. I found 'ObjectPoolingAndThreading' before, but the
code
> given assumed that it was spawning fresh threads itself - which doesn't
work
> where some other process is spawning them.

Thanks!  I'm not satisfied with it yet, but I try to add something from time
to time.

Kind regards

    robert

Attachments (1)

thread-safe-instance-pool.rb (1.15 KB, text/x-ruby)
require 'thread'

=begin
=Class InstancePool

This class maintains a thread safe pool of instances.
Instances are obtained via ((<InstancePool#get>)) and
put back via ((<InstancePool#put>)).  These operations
are thread safe.

New instances are created via the factory code handed to
the constructor as block.
=end

class InstancePool
  def initialize(maxSize = nil, initialSize = 0, &factory)
    @mutex = Mutex.new
    @pool = []
    @verify = proc {|o| o}

    @max = maxSize
    @factory = factory

    initialSize.times { @pool.push @factory.call }
  end

  def verify(&v)
    @mutex.synchronize do
      @verify = v
    end

    self
  end

  def get
    @mutex.synchronize do
      obj = @pool.shift

      until @verify.call(obj) || @pool.empty? do
        obj = @pool.shift
      end

      obj or @factory.call
    end
  end


  def put(obj)
    @mutex.synchronize do
      @pool.push obj if @verify.call(obj) && (!@max || @pool.size < @max)
    end
  end

end


# demo, without threads
count = 0
pool = InstancePool.new {"s#{count+=1}"}.verify {|o| o and o =~ /^s\d*3$/}

for i in 0..10
  o = pool.get

  begin
    puts "#{i}: #{o}"
  ensure
    pool.put o
  end
end

In This Thread

Prev Next