[plt-scheme] Threading vs. System Threads
How do you handle killing of threads? That is, in the face of
custodian-shutdown-all or kill-thread, can messages appear multiple
times or can internal queues get put into bad states (deadlock)?
Robby
At Wed, 12 Feb 2003 12:07:52 -0500 (EST), Gregory Cooper wrote:
> For list-related administrative tasks:
> http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>
>
> Actually, what I've been working on is a thread communication library for
> PLT Scheme. My goal is to provide the essence of Erlang-style processes
> and message-passing, which involve the following three constructs:
>
> (spawn expr ...)
>
> creates a new thread to evaluate the given expressions, returning the
> thread's id, which can be used as a destination for messages;
>
> (! tid val)
>
> sends val to tid; this call returns (void) immediately, and the message is
> queued in tid's mailbox until tid is ready to process it;
>
> (receive [after timeout timeout-expr ...] ; (optional)
> [pat expr ...]
> ...)
>
> blocks the current thread until either the timeout (if given) expires or
> the thread receives a message matching one of the given patterns; the
> patterns can bind variables for use in the corresponding expressions,
> which are evaluated upon receipt of the message.
>
> I have an implementation of this interface that uses MzScheme's
> (preemptive) threads and performs quite well in general. On my machine,
> for example, I can create several thousand threads in DrScheme without
> straining the system much. However, in a restricted setting, I've found I
> can use a custom, cooperative threading model to improve performance
> significantly. In particular, I can cut the spawning time by a factor of
> 25, reduce the resource requirements by a factor of 50, and also modestly
> reduce communication time (by up to a factor of 2).
>
> Greg