[ale] Re: Threading? (was: Re: [ale] C#)

Michael D. Hirsch mhirsch at nubridges.com
Thu Sep 26 10:31:45 EDT 2002


On Thursday 26 September 2002 09:52 am, Jeff Hubbs wrote:
> Michael -
>
> Thank you very much for the information; what you said was very
> helpful.
>
> Yes, I do recall the coop/preempt debate - in fact, I used to have a
> book on NT that went into some detail there.
>
> > That is about right.  There are two ways to do threads.  The first
> > way (user threads) is to write a threading library which gets
> > linked in to your code.  This library has some clever code that
> > switches between threads.
> >
> > The other way (kernel threads) is to have an OS that understands
> > threads and let the kernel scheduler schedule them.  In Linux the
> > kernel actually doesn't know the difference betwenn threads and
> > processes and it schedules them identically.
>
> I'm having a bit of confusion here - what of what you're descibing is
> being changed with this new Native POSIX Thread Library discussed in
> http://kerneltrap.org/node.php?id=422?

That article sems to have fallen off the face of the Earth, but I assume 
it is talking about the amazing threading results that Ingo and Ulrich 
have announced with the new kernel and glibc (100,000 threads in 2 
seconds!).  That really doesn't change anything I've said.  It means 
that kernel threads have gotten a whole lot better.  But if python 
doesn't use them, it doesn't help python at all.  Java will thread a 
lot better, probably.  Java does have some serious problems and I hope 
that having a proper POSIX threading implementation will help Java 
under Linux.

> What I'm forming in my head (correctly, I hope) is that if Python's
> threading is or has been moved from user-land to kernel-land, the
> kernel's thread-handling capability will be able to accommodate the
> change very nicely.
>
> It's my hope/suspicion that this bodes very well for large-scale
> Python apps on Linux (Zope included).

I hope so too, but I think it is really an independant question.

--michael

> On Thu, 2002-09-26 at 09:18, Michael D. Hirsch wrote:
> > On Wednesday 25 September 2002 09:46 pm, Jeff Hubbs wrote:
> > > OK, I've held back my ignorance about as long as I can.
> > >
> > > Can you explain to me "threading?"  I think I stopped coding a
> > > little too early in life (Pascal-on-VAX/VMS-era) to really
> > > understand what all this is about.  My crude understanding is
> > > that threading is where one process branches off into multiple
> > > "threads" of execution, the distinction between processes and
> > > threads being that threads all execute in the same context.  Is
> > > my conceptualization more or less correct?
> >
> > That is about right.  There are two ways to do threads.  The first
> > way (user threads) is to write a threading library which gets
> > linked in to your code.  This library has some clever code that
> > switches between threads.
> >
> > The other way (kernel threads) is to have an OS that understands
> > threads and let the kernel scheduler schedule them.  In Linux the
> > kernel actually doesn't know the difference betwenn threads and
> > processes and it schedules them identically.
> >
> > Remember all the debates about "preemptive" vs. "cooperative" OSes.
> > Windows and Mac were cooperative and Unix and NT were preemptive. 
> > This is a very similar debate.  With user threads, when a thread is
> > stuck in a system call, there is no way for the scheduling library
> > to run another thread.  With kernel threads, when a thread is in a
> > system call the kernel may be able to schedule some other process
> > or thread.
> >
> > > And can you elaborate a bit about "python has way worse threading
> > > than java?"  What constitutes "worse?"  Is there an underlying
> > > reason why that is so?
> >
> > Sure, as you might guess from the above, the issue is what kind of
> > threads they use.  Java supports both kinds of threads, but almost
> > everyone uses kernel threads.  When one thread is blocking on I/O,
> > other threads can run.  (Java calls these "green threads" and
> > "native threads".)
> >
> > Python only has user threads (I think--I'm no expert on this aspect
> > of python).  When a thread does I/O the threading library is pretty
> > clever and can time it out, but until it either times out or
> > finishes, no other thread in that process will proceed.  So in,
> > say, a web server like ZOPE, if there are a lot of connections
> > there will be a lot of threads blocking on I/O.  This will slow it
> > down incredibly.  Also if the threads have to pull data off the
> > disk they will block on disk access, again slowing it down.  For
> > this reason ZOPE tries to cache all it's objects in RAM.  It is
> > quite possible to run out of RAM for this. Also, until everything
> > is in RAM there are lots of threads blocking on disk access.
> >
> > I think I read somewhere that python is trying to use kernel
> > threads, but I don't recall if that was in version 2.2, which is
> > already release, or in a future version.
> >
> > I love python--I would say it is my favorite language--and I hope
> > it gets better threading support soon.
> >
> > --Michael
> >
> > > - Jeff
> > >
> > > On Wed, 2002-09-25 at 20:10, Michael D. Hirsch wrote:
> > > > On Wed, 2002-09-25 at 15:19, Benjamin Scherrey wrote:
> > > > > Do it in python. You get an even easier language to use than
> > > > > java, all the platform independence (and perhaps more), and
> > > > > can always plug in some C/C++ stuff in the backend if
> > > > > performance becomes an issue. I'm doing all my web
> > > > > development in python now using mod_python and quixote.
> > > > > Database connectivity is great as well which is better than I
> > > > > can say for java or C# (although I'll be interested when a
> > > > > good implementation of jdo comes out).
> > > >
> > > > AAK!  I love Python, but don't do it in python.  Unless version
> > > > 2.2 has changed things dramatically, python has way worse
> > > > threading than java.  Java at least uses native threads, so
> > > > they are scheduled efficiantly.  Last I heard python did it's
> > > > own threading and a highly threaded program where the threads
> > > > are I/O bound will just crawl.  This was something that killed
> > > > us when using ZOPE, another extremely cool program.
> > > >
> > > > --Michael
> > > >
> > > > >       good luck & let us know what you do,
> > > > >
> > > > >               Ben Scherrey
> > > > >
> > > > > On Wednesday 25 September 2002 02:54 pm, cfowler wrote:
> > > > > > Right now I'm at the beginning of a large Java project. 
> > > > > > I'm just desiging forms for now.  But this is just
> > > > > > graphics.  I'm doing research as to the best way to go.  I
> > > > > > need to be scalable when it comes to threads and I believe
> > > > > > that Java may bite me in the end. I want to handle 100+ TCP
> > > > > > connections into one client.
> > > > > >
> > > > > > On Wed, 2002-09-25 at 14:48, Geoffrey wrote:
> > > > > > > cfowler wrote:
> > > > > > > > Anyone here using C# on Linux?
> > > > > > >
> > > > > > > Why would you?
> > > >
> > > > ---
> > > > This message has been sent through the ALE general discussion
> > > > list. See http://www.ale.org/mailing-lists.shtml for more info.
> > > > Problems should be sent to listmaster at ale dot org.


---
This message has been sent through the ALE general discussion list.
See http://www.ale.org/mailing-lists.shtml for more info. Problems should be
sent to listmaster at ale dot org.






More information about the Ale mailing list