[ale] Re: Threading? (was: Re: [ale] C#)
Jeff Hubbs
hbbs at attbi.com
Thu Sep 26 09:52:06 EDT 2002
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?
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).
- Jeff
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