[armedbear-devel] Patch to add multi-threading to ABCL SLIME
Mark Evenson
evenson at panix.com
Thu Jul 2 09:00:12 UTC 2009
Don Cohen wrote:
> Mark Evenson writes:
> > Attached is a patch against SLIME CVS HEAD to implement multi-threading
>
> Is there some documentation about how to use multithreading in abcl?
No, unfortunately there isn't, and I've never totally convinced myself
from reading the code that the internals of ABCL are going to hold up
under heavy usage, which was part of my motivation to try this out.
The interfaces, such as they exist, can be seen in [LispThread.java][1],
all existing in the EXTERNAL package.
A quick transcription of the source code:
(MAKE-THREAD FUNCTION &key NAME)
Creates and runs a thread to evalulate FUNCTION setting the NAME.
(THREADP OBJECT)
Boolean predicate whether OBJECT is a thread.
(THREAD-ALIVE-P THREAD)
Boolean predicate whether THREAD is alive.
(THREAD-NAME THREAD)
Return name of THREAD.
(SLEEP SECONDS)
Cause the invoking thread to sleep SECONDS which can be expressed as
a fraction, i.e. (sleep .1) would sleep for 100ms.
(MAPCAR-THREADS FUNCTION)
Apply FUNCTION to each of the threads created via MAKE-THREAD.
(DESTROY-THREAD THREAD)
Mark THREAD as destroyed.
(INTERRUPT THREAD FUNCTION &rest ARGS)
Interrupt thread to apply function to args. Order of interrupts is
not guaranteed. Thread should resume processing after processing all
outstanding interupts
(USE-FAST-CALLS BOOLEAN)
Sets an internal optimization for execution to BOOLEAN.
[1]:
http://trac.common-lisp.net/armedbear/browser/trunk/abcl/src/org/armedbear/lisp/LispThread.java
Of these functions, I am only sure that MAKE-THREAD and SLEEP work.
Setting the thread's name doesn't currently work, but I'll fix that with
patches when I get a chance. And add docstrings with the above content.
> I've never used slime but am looking at the doc now.
> What I was hoping to see but don't yet is how to debug a thread.
> In particular, I want to know how to
> - break a running thread (so it goes into the debugger)
> - connect an emacs buffer to the debugger ONLY in that thread
This is beyond my knowledge. From a quick browsing of the SLIME source
there is a thread browser with a DEBUG-NTH-THREAD function that looks
like a promising answer to your first question.
> If there is any current support for these things, even in some
> other lisp implementation, even in some emacs package other than
> slime, please send a link.
I would have said your best bet for multi-threading SLIME interaction is
probably [SBCL][2] on a supported multi-threading platform (I know that
Linux and OSX are supported), but I just tried the promising
SLIME-LIST-THREADS emacs function, returning a condition stating that
SWANK-BACKEND:ALL-THREADS isn't implemented.
You might try asking on the [SLIME mailing list][3]. Note that the
SLIME community is a very "hack it yourself" oriented group, as there
aren't releases per se.
[2]: http://www.sbcl.org/
[3]: nntp://news.gmane.org/gmane.lisp.slime.devel
--
"A screaming comes across the sky. It has happened before, but there
is nothing to compare to it now."
More information about the armedbear-devel
mailing list