Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Threads vs. continuations

Reply
Thread Tools

Threads vs. continuations

 
 
miller.paul.w@gmail.com
Guest
Posts: n/a
 
      02-19-2008
I've been doing some thinking, and I've halfway convinced myself of
the following statement: that threads as implemented by Python (or
Java) are exactly equivalent to one-shot continuations in Scheme. Am
I right? (I'd have asked in the scheme groups, but I feel like I'm
less likely to get flamed to death here... hehe.)

If that's the case, it seems threads plus hygeinic macros and a few
primitives a la Scheme would form a solid basis upon which to build a
programming language. The only thing preventing Python from being
that language is the difficulty of integrating a macro system, n'est-
ce pas?

Thanks!

Paul
 
Reply With Quote
 
 
 
 
Tim Daneliuk
Guest
Posts: n/a
 
      02-19-2008
http://www.velocityreviews.com/forums/(E-Mail Removed) wrote:
> I've been doing some thinking, and I've halfway convinced myself of
> the following statement: that threads as implemented by Python (or
> Java) are exactly equivalent to one-shot continuations in Scheme. Am
> I right? (I'd have asked in the scheme groups, but I feel like I'm
> less likely to get flamed to death here... hehe.)
>
> If that's the case, it seems threads plus hygeinic macros and a few
> primitives a la Scheme would form a solid basis upon which to build a
> programming language. The only thing preventing Python from being
> that language is the difficulty of integrating a macro system, n'est-
> ce pas?
>
> Thanks!
>
> Paul


An interesting question to which I shall stay tuned for an answer.

However, allow me to point out that there is a macro language for
Python. It's called 'm4' ... <ducks and runs>

--
----------------------------------------------------------------------------
Tim Daneliuk (E-Mail Removed)
PGP Key: http://www.tundraware.com/PGP/
 
Reply With Quote
 
 
 
 
Aahz
Guest
Posts: n/a
 
      02-19-2008
In article <(E-Mail Removed)>,
<(E-Mail Removed)> wrote:
>
>If that's the case, it seems threads plus hygeinic macros and a few
>primitives a la Scheme would form a solid basis upon which to build a
>programming language. The only thing preventing Python from being
>that language is the difficulty of integrating a macro system, n'est-
>ce pas?


"Difficulty" as measured in Guido being less likely than the survival of
a snowball in the Sahara to ever consider anything like hygenic macros.
--
Aahz ((E-Mail Removed)) <*> http://www.pythoncraft.com/

"All problems in computer science can be solved by another level of
indirection." --Butler Lampson
 
Reply With Quote
 
Arnaud Delobelle
Guest
Posts: n/a
 
      02-19-2008
On Feb 19, 8:26*pm, (E-Mail Removed) wrote:
[...]
> The only thing preventing Python from being
> that language is the difficulty of integrating a macro system, n'est-
> ce pas?


Well there's logix (http://www.livelogix.net/logix/)


--
Arnaud

 
Reply With Quote
 
Martin v. L÷wis
Guest
Posts: n/a
 
      02-19-2008
> I've been doing some thinking, and I've halfway convinced myself of
> the following statement: that threads as implemented by Python (or
> Java) are exactly equivalent to one-shot continuations in Scheme. Am
> I right?


No. In case of threads, progress can be made in an overlapping
(concurrent), in case of Java even parallel fashion. In particular,
if a thread blocks in a blocking operating system call (e.g. a network
receive operation), other threads can continue. I believe this is not
possible with continuations in Scheme.

In more detail, threads as provided by the operating system underly
a system scheduler: they can be preempted, they have priorities,
and they may voluntarily block. All this is not possible with
continuations.

IOW, threads are more expressive than continuations.

Regards,
Martin
 
Reply With Quote
 
Tim Daneliuk
Guest
Posts: n/a
 
      02-19-2008
Martin v. L÷wis wrote:
>> I've been doing some thinking, and I've halfway convinced myself of
>> the following statement: that threads as implemented by Python (or
>> Java) are exactly equivalent to one-shot continuations in Scheme. Am
>> I right?

>
> No. In case of threads, progress can be made in an overlapping
> (concurrent), in case of Java even parallel fashion. In particular,
> if a thread blocks in a blocking operating system call (e.g. a network
> receive operation), other threads can continue. I believe this is not
> possible with continuations in Scheme.
>
> In more detail, threads as provided by the operating system underly
> a system scheduler: they can be preempted, they have priorities,
> and they may voluntarily block. All this is not possible with
> continuations.
>
> IOW, threads are more expressive than continuations.
>
> Regards,
> Martin


That's assuming that the threading implemented at the language
level is actually realized by underlying kernel threading.
Is/Was it not the case, though, that some languages present
a threading model to the programmer that is realized in user
space, but not in the kernel. ISTR some early implementations
of Posix Threads that worked that way. The API was there
and was correct, but - since everything was actually running
in user space - when a single "thread" blocked, they all did.

'Not trying to start a fight here, I'm just curious about the
current state of that art. It is the case today that all
modern language threading is realized over a kernel implementation
of threading that behaves as you suggest?



--
----------------------------------------------------------------------------
Tim Daneliuk (E-Mail Removed)
PGP Key: http://www.tundraware.com/PGP/
 
Reply With Quote
 
Paul Rubin
Guest
Posts: n/a
 
      02-19-2008
Tim Daneliuk <(E-Mail Removed)> writes:
> 'Not trying to start a fight here, I'm just curious about the
> current state of that art. It is the case today that all
> modern language threading is realized over a kernel implementation
> of threading that behaves as you suggest?


Certainly not. See Erlang, Haskell, Concurrent ML, etc.
The low level i/o in the runtime systems for those languages has
to be written to never block, but the payback is much lighter weight
user threads.
 
Reply With Quote
 
Martin v. L÷wis
Guest
Posts: n/a
 
      02-19-2008
> That's assuming that the threading implemented at the language
> level is actually realized by underlying kernel threading.
> Is/Was it not the case, though, that some languages present
> a threading model to the programmer that is realized in user
> space, but not in the kernel.


You were asking about Python and Java specifically. Python
has been using OS threads as its threading foundation ever
since operating systems started supporting threads (there is
still support for user-level thread libraries in Python,
but I doubt it's still in use anywhere). Java had different
versions of the JVM in the past, one that supported only
user-mode threads, but likewise, these got out of use quite
some time ago.

> ISTR some early implementations
> of Posix Threads that worked that way. The API was there
> and was correct, but - since everything was actually running
> in user space - when a single "thread" blocked, they all did.


No, not in any good user-mode thread library. E.g. the GNU Pth
library manages to provide user-mode dispatching and provides
wrappers for blocking calls that dispatch to a different thread
if blocking would occur.

> 'Not trying to start a fight here, I'm just curious about the
> current state of that art. It is the case today that all
> modern language threading is realized over a kernel implementation
> of threading that behaves as you suggest?


I didn't suggest it for all languages, only for Python (or Java),
see your original posting.

Regards,
Martin
 
Reply With Quote
 
John Nagle
Guest
Posts: n/a
 
      02-20-2008
Tim Daneliuk wrote:
> Martin v. L÷wis wrote:


> Is/Was it not the case, though, that some languages present
> a threading model to the programmer that is realized in user
> space, but not in the kernel. ISTR some early implementations
> of Posix Threads that worked that way. The API was there
> and was correct, but - since everything was actually running
> in user space - when a single "thread" blocked, they all did.


People did things like that to hammer threading onto operating
systems so dumb they couldn't context switch, like
DOS, early Windows, and MacOS through 7. Nobody does that
any more.

For one thing, it's easier to build a real scheduler
than to build the hacks for working without one. (Mac programmers
referred to this as the Mess Inside - no real CPU dispatcher, but
"deferred tasks", "timer tasks", "vertical interval tasks", and
similar hacks to work around the lack of one.)

John Nagle
 
Reply With Quote
 
Paul Rubin
Guest
Posts: n/a
 
      02-20-2008
John Nagle <(E-Mail Removed)> writes:
> People did things like that to hammer threading onto operating
> systems so dumb they couldn't context switch, like
> DOS, early Windows, and MacOS through 7. Nobody does that
> any more.


I see stuff heading more the other way; here's a description of a test
of Erlang with 20 million (userspace) threads:

http://groups.google.com/group/comp....b7a62afb727a4f

I don't know of any OS's that can handle that many threads.
Lightweight userspace threads also makes it sane to do things like
make GUI's with a separate thread per widget, and in general to
handle large numbers of concurrent tasks without the large memory
footprint and context switch overhead of kernel level threads.
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
RFC 822 continuations Florian Lindner Python 2 05-02-2006 07:57 PM
Ruby/Python Continuations: Turning a block callback into a read()-method? Robert Python 0 02-12-2006 08:14 PM
Continuations Based Web Framework - Seaside. Mike Thompson Python 17 01-04-2005 01:08 AM
RE: Are line continuations needed? Batista, Facundo Python 9 04-09-2004 08:42 AM
Are line continuations needed? Russell Wallace Python 13 04-08-2004 12:47 PM



Advertisments