From: Martin Stjernholm <mast@lysator.liu.se>
Cc: Ted Zlatanov <tzz@lifelogs.com>, emacs-devel@gnu.org
Subject: Re: Are there plans for a multi-threaded Emacs?
Date: Mon, 08 Dec 2003 23:02:14 +0100 [thread overview]
Message-ID: <5bn0a37yu1.fsf@lister.roxen.com> (raw)
In-Reply-To: <x58yln9qz0.fsf@lola.goethe.zz> (David Kastrup's message of "08 Dec 2003 18:09:07 +0100")
David Kastrup <dak@gnu.org> wrote:
> /.../ If I execute some keystrokes that will mark a region and then
> press the delete key before the operation that will mark the region
> actually has completed, I won't be happy if it instead deletes what
> happens to be at the time marked by something else. /.../
That sounds like the first bug that would be fixed after a nonblocking
command loop has been implemented. It's hardly an argument against
such a thing in general. There are still many cases where the
responsiveness can be improved. Threads (or one-shot continuations, if
you like) often makes it easier to accomplish that, especially when it
comes to fixing old applications which are written with blocking
operations (since changing them to be event driven is more or less
turning them inside-out).
As for keyboard input, I don't think one ever wants to parallelize it,
not even when loading a large file or starting Gnus. It could however
be nice to put an executing command "in the background", just like you
can press C-z bg RET in a shell if you find that a command takes too
long. That'd be a really neat feature, actually.
Things that should run in the background by default are instead those
that are trigged by non-user activities, such as timers running out,
network traffic, and display redraws.
If a thread or continuation facitility is implemented, I have some
ideas for the elisp interface to make it comparatively easy to adapt
existing code to a reasonable degree of parallelism (not to be
confused with true multi-cpu parallelism). It's basically the idea
about buffer local threads discussed earlier in this discussion
thread, but outlined in more detail:
o There are two kinds of locks: One for everything and one for each
buffer's local data.(*)
o There is a form similar to `interactive' that declares a function
to be buffer local.
o Events that preferably should run in the background (i.e. anything
but input events from the user, afaics) check if the function being
called is declared as buffer local.
o Functions declared as buffer local are allowed to run until they
access some buffer local data, and the lock for that buffer is then
taken automatically.
o The global lock is taken for other functions. That implies taking
the buffer locks for all buffers. The functions will run just like
today.
o If only a buffer lock is taken, the function and all code it calls
are allowed to change the buffer local data. Any attempt to change
global data will give an error, but reading it is fine.
o Whenever a buffer local function waits in blocking I/O or is
preempted (cooperative multitasking isn't necessary), a function
local to another buffer can run. This is the improvement. Given
that almost all activities in Emacs are correlated to a single
buffer, this should be a common situation.
The important points with this model are that it is free from all
possible deadlocks and races, and that it gives good errors which
makes it relatively easy to adapt existing code. To improve the
parallelism of a certain piece of code, simply declare the callback as
buffer local and then run until the global write error occurs.
Investigate the error and remove the global change. Repeat.
The byte compiler can already track call trees. With a bit of work it
could probably be extended to check for global writes from buffer
local functions at compile time.
The locking model can of course be refined further. Primitives should
be available to let the elisp programmer explicitly disable this
safety net and implement custom locking instead, at least to the
extent that several threads holds the same buffer lock (allowing it
for the global lock is more questionable).
*) Note that these are elisp level locks; on the C level there can
still be a single "everything" lock without sacrificing
responsiveness, as has been discussed earlier. That would probably
avoid considerable internal complexity since things aren't as well
separated into buffer contexts there as they appear to be on the
elisp level.
next prev parent reply other threads:[~2003-12-08 22:02 UTC|newest]
Thread overview: 133+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-11-16 21:46 Are there plans for a multi-threaded Emacs? Frank Schmitt
2003-11-17 0:49 ` Alex Schroeder
2003-11-17 4:06 ` Dhruva Krishnamurthy
2003-11-17 4:29 ` Miles Bader
2003-11-30 16:36 ` Kai Grossjohann
2003-11-30 18:01 ` Vinicius Jose Latorre
2003-11-30 18:39 ` Kai Grossjohann
2003-11-30 18:12 ` Benjamin Riefenstahl
2003-11-30 19:40 ` Nic Ferrier
2003-12-01 16:04 ` Ted Zlatanov
2003-12-02 14:45 ` Ted Lemon
2003-12-02 15:48 ` Per Abrahamsen
2003-12-02 17:18 ` David Kastrup
2003-12-03 12:38 ` Per Abrahamsen
2003-12-02 17:27 ` Stefan Monnier
2003-12-02 18:53 ` Simon Josefsson
2003-12-03 13:03 ` Per Abrahamsen
2003-12-02 17:44 ` Ted Zlatanov
2003-12-03 17:16 ` Richard Stallman
2003-12-03 17:58 ` Ted Zlatanov
2003-12-03 23:38 ` Martin Stjernholm
2003-12-04 13:05 ` Ted Zlatanov
2003-12-04 14:07 ` David Kastrup
2003-12-04 14:58 ` Nic Ferrier
2003-12-04 15:44 ` David Kastrup
2003-12-04 16:17 ` Kim F. Storm
2003-12-04 15:58 ` Nic Ferrier
2003-12-04 16:26 ` non-blocking sockets (was Re: Are there plans for a multi-threaded Emacs?) Nic Ferrier
2003-12-05 11:35 ` Kim F. Storm
2003-12-04 19:55 ` Are there plans for a multi-threaded Emacs? Ted Zlatanov
2003-12-04 20:30 ` Stefan Monnier
2003-12-04 20:58 ` Ted Zlatanov
2003-12-04 22:49 ` Stefan Monnier
2003-12-05 12:17 ` Ted Zlatanov
2003-12-05 13:06 ` Thien-Thi Nguyen
2003-12-05 14:44 ` David Kastrup
2003-12-07 23:55 ` Stefan Monnier
2003-12-08 16:54 ` Ted Zlatanov
2003-12-08 17:09 ` David Kastrup
2003-12-08 18:10 ` Ted Zlatanov
2003-12-08 22:02 ` Martin Stjernholm [this message]
2003-12-08 18:25 ` What's the problem? (Was: Are there plans for a multi-threaded Emacs?) Luke Gorrie
2003-12-08 19:56 ` Ted Zlatanov
2003-12-08 20:56 ` David Kastrup
2003-12-08 22:09 ` Martin Stjernholm
2003-12-08 21:01 ` Stefan Monnier
2003-12-08 19:57 ` What's the problem? Simon Josefsson
2003-12-09 23:45 ` Juri Linkov
2003-12-10 0:58 ` Simon Josefsson
2003-12-10 4:35 ` Miles Bader
2003-12-10 5:38 ` Simon Josefsson
2003-12-10 5:51 ` Miles Bader
2003-12-10 6:34 ` Simon Josefsson
2003-12-10 7:19 ` Miles Bader
2003-12-11 14:12 ` Stefan Monnier
2003-12-11 23:09 ` Miles Bader
2003-12-12 23:55 ` Richard Stallman
2003-12-13 16:11 ` Eli Zaretskii
2003-12-13 17:29 ` Jan D.
2003-12-13 17:35 ` David Kastrup
2003-12-14 6:17 ` Eli Zaretskii
2003-12-14 11:55 ` David Kastrup
2003-12-14 14:27 ` Eli Zaretskii
2003-12-14 10:18 ` Richard Stallman
2003-12-10 8:18 ` Eli Zaretskii
2003-12-11 14:45 ` Richard Stallman
2003-12-10 15:36 ` Ted Zlatanov
2003-12-11 1:46 ` Miles Bader
2003-12-12 23:54 ` Richard Stallman
2003-12-11 18:39 ` Ted Zlatanov
2003-12-11 18:48 ` Ted Zlatanov
2003-12-12 3:27 ` Luke A. Olbrish
2003-12-12 3:57 ` Miles Bader
2003-12-13 15:17 ` Richard Stallman
2003-12-13 4:08 ` Miles Bader
2003-12-13 23:14 ` Richard Stallman
2003-12-14 13:12 ` Emacs kill buffer Camm Maguire
2003-12-09 19:28 ` What's the problem? (Was: Are there plans for a multi-threaded Emacs?) Ted Zlatanov
2003-12-09 22:02 ` David Kastrup
2003-12-10 0:13 ` Stefan Monnier
2003-12-10 1:41 ` David Kastrup
2003-12-10 2:49 ` Stefan Monnier
2003-12-12 0:44 ` Martin Stjernholm
2003-12-10 0:45 ` Martin Stjernholm
2003-12-10 2:55 ` Stefan Monnier
2003-12-09 19:32 ` Ted Zlatanov
2003-12-09 22:13 ` Stefan Monnier
2003-12-10 15:16 ` Ted Zlatanov
[not found] ` <E1AUS6B-0006KH-Hq@fencepost.gnu.org>
[not found] ` <4ny8tjryy8.fsf@collins.bwh.harvard.edu>
[not found] ` <4nn09xm68c.fsf@collins.bwh.harvard.edu>
2003-12-13 23:15 ` What's the problem? Richard Stallman
2003-12-14 3:21 ` Martin Stjernholm
2003-12-05 8:58 ` Are there plans for a multi-threaded Emacs? Thien-Thi Nguyen
2003-12-05 11:58 ` Ted Zlatanov
2003-12-05 12:12 ` Ted Zlatanov
2003-12-05 20:37 ` Luke A. Olbrish
2003-12-05 21:45 ` Ted Zlatanov
2003-12-08 0:10 ` Stefan Monnier
2003-12-08 1:26 ` Luke A. Olbrish
2003-12-04 17:22 ` Martin Stjernholm
2003-12-04 18:01 ` David Kastrup
2003-12-04 18:31 ` Martin Stjernholm
2003-12-04 19:26 ` David Kastrup
2003-12-04 22:05 ` Martin Stjernholm
2003-12-04 20:18 ` Ted Zlatanov
2003-12-04 23:00 ` Martin Stjernholm
2003-12-05 12:06 ` Ted Zlatanov
2003-12-05 13:16 ` Martin Stjernholm
2003-12-05 21:30 ` Ted Zlatanov
2003-12-05 14:46 ` David Kastrup
2003-12-05 15:07 ` Martin Stjernholm
2003-12-05 13:56 ` Benjamin Riefenstahl
2003-12-05 21:33 ` non-blocking auto-save (was: Are there plans for a multi-threaded Emacs?) Ted Zlatanov
2003-12-03 20:01 ` Are there plans for a multi-threaded Emacs? Nic Ferrier
2003-12-03 20:29 ` Stefan Monnier
2003-12-03 21:42 ` Robert J. Chassell
2003-12-04 7:33 ` Richard Stallman
2003-12-04 15:37 ` Stefan Monnier
2003-12-04 18:06 ` Thien-Thi Nguyen
2003-12-04 7:33 ` Richard Stallman
2003-12-04 13:14 ` Ted Zlatanov
2003-12-04 15:41 ` Stefan Monnier
2003-12-06 20:58 ` Kai Grossjohann
2003-12-07 0:15 ` Thien-Thi Nguyen
2003-12-07 14:52 ` Kai Grossjohann
2003-12-07 16:58 ` Thien-Thi Nguyen
2003-12-07 4:16 ` Martin Stjernholm
2003-12-07 14:53 ` Kai Grossjohann
2003-12-07 23:00 ` Martin Stjernholm
2003-11-17 19:31 ` Richard Stallman
2003-11-17 22:53 ` David Masterson
2003-11-18 5:57 ` Miles Bader
2003-11-20 19:19 ` David Masterson
2003-11-22 21:19 ` Richard Stallman
2003-11-18 6:52 ` John Wiegley
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5bn0a37yu1.fsf@lister.roxen.com \
--to=mast@lysator.liu.se \
--cc=emacs-devel@gnu.org \
--cc=tzz@lifelogs.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.