[#10209] Market for XML Web stuff — Matt Sergeant <matt@...>

I'm trying to get a handle on what the size of the market for AxKit would be

15 messages 2001/02/01

[#10238] RFC: RubyVM (long) — Robert Feldt <feldt@...>

Hi,

20 messages 2001/02/01
[#10364] Re: RFC: RubyVM (long) — Mathieu Bouchard <matju@...> 2001/02/05

[#10708] Suggestion for threading model — Stephen White <spwhite@...>

I've been playing around with multi-threading. I notice that there are

11 messages 2001/02/11

[#10853] Re: RubyChangeRequest #U002: new proper name for Hash#indexes, Array#indexes — "Mike Wilson" <wmwilson01@...>

10 messages 2001/02/14

[#11037] to_s and << — "Brent Rowland" <tarod@...>

list = [1, 2.3, 'four', false]

15 messages 2001/02/18

[#11094] Re: Summary: RCR #U002 - proper new name fo r indexes — Aleksi Niemel<aleksi.niemela@...>

> On Mon, 19 Feb 2001, Yukihiro Matsumoto wrote:

12 messages 2001/02/19

[#11131] Re: Summary: RCR #U002 - proper new name fo r indexes — "Conrad Schneiker" <schneik@...>

Robert Feldt wrote:

10 messages 2001/02/19

[#11251] Programming Ruby is now online — Dave Thomas <Dave@...>

36 messages 2001/02/21

[#11469] XML-RPC and KDE — schuerig@... (Michael Schuerig)

23 messages 2001/02/24
[#11490] Re: XML-RPC and KDE — schuerig@... (Michael Schuerig) 2001/02/24

Michael Neumann <neumann@s-direktnet.de> wrote:

[#11491] Negative Reviews for Ruby and Programming Ruby — Jim Freeze <jim@...> 2001/02/24

Hi all:

[#11633] RCR: shortcut for instance variable initialization — Dave Thomas <Dave@...>

13 messages 2001/02/26

[#11652] RE: RCR: shortcut for instance variable initialization — Michael Davis <mdavis@...>

I like it!

14 messages 2001/02/27

[#11700] Starting Once Again — Ron Jeffries <ronjeffries@...>

OK, I'm starting again with Ruby. I'm just assuming that I've

31 messages 2001/02/27
[#11712] RE: Starting Once Again — "Aaron Hinni" <aaron@...> 2001/02/27

> 2. So far I think running under TextPad will be better than running

[#11726] Re: Starting Once Again — Aleksi Niemel<zak@...> 2001/02/28

On Wed, 28 Feb 2001, Aaron Hinni wrote:

[ruby-talk:10716] Re: Threading model change, proposal

From: "Alex Maranda" <alex_maranda@...>
Date: 2001-02-12 06:40:03 UTC
List: ruby-talk #10716
> From what I guess, Python's use of operating system threads results in an
> ugly global interpreter lock which actually means that at any time, only
one
> Python thread can run the interpreter!
Yes. The Python interpreter is not reentrant; that's not as bad as it sounds
since it is customary to release the lock upon entering a blocking syscall
and reacquire it upon exit.

>
> On the other hand, simulating threads in Python results in simpler code
but
I assume that was meant as "simulating threads in Ruby"

> any blocking call in an extension module freezes all Ruby threads at once.
>
> Why would not choose to get the best of both worlds :
>
> * use one main thread which runs the Ruby interpreter
> * use worker threads in which potentially blocking extensions module calls
> would run.
What stops you now from firing up a worker thread for your blocking
syscall(s)? as long as you're not calling back into the Ruby interpreter you
should be fine (the implicit assumption here is that the Ruby interpreter is
not reentrant, which is likely to be the case since it doesn't support
system threads).

>
> This way, the structure of the interpreter and the threading model could
> remain under tight control while allowing blocking native calls to run in
> parallel without blocking the ruby threads.
>
> Sure enough, it is easier said than done !!
> I don't know to which extent the interpreter core would need to be
modified
> in order to support this model.
> Anyone cares to comment ?
Umm. let's review the options here, for any "interpreter", not only Ruby:
1) "green" threads [Ruby as of today]
2) system threads, with a non-reentrant interpreter [Python, global
interpreter lock]
3) system threads, fully reentrant interpreter [no example comes to mind]

The reason Python stopped at 2) is because 3) is hard. The reason Ruby
stopped at 1) is because ...LOL.

The issue with 2) is that one cannot take advantage of multiprocessor
machines, but it will solve your blocking problem with minimal effort. I
don't think you have other option [in Ruby] but to spawn your worker thread
from an extension module (and not call back into the interpreter). The only
reason I'm repeating myself is because last week I've been doing that in a
Python extension module, without owning the lock LOL.

Alex


In This Thread