From: Giuseppe Scrivano <gscrivano@gnu.org>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: emacs-devel@gnu.org
Subject: Re: multi-threaded Emacs
Date: Sat, 29 Nov 2008 22:01:26 +0100 [thread overview]
Message-ID: <873ahant5l.fsf@master.homenet> (raw)
In-Reply-To: <jwvr64uz442.fsf-monnier+emacs@gnu.org> (Stefan Monnier's message of "Sat, 29 Nov 2008 15:26:21 -0500")
Hello,
Stefan Monnier <monnier@iro.umontreal.ca> writes:
> - handling thread-specific data: gcprolist, mark_byte_stack, and things
> like that. You've tackled this one. I don't find your solution very
> elegant, but I can't think of a much better one, unless pthreads does
> provide some kind of thread-specific variables. I guess the only
> improvement is to put those vars together, so we have an array of
> structs (that then contain gcprolist, and mark_byte_stack fields)
> rather than several arrays. And then define `gcprolist' as a macro
> that expands into "thread_data[current_thread()].gcprolist", so as to
> reduce the amount of source-code changes.
Yes, we can put thread-specific data together in a struct; what about
buffer data? `current_buffer' must be different for every thread so as
many other global variables, should it be defined in the same
thread_data struct?
> - dynamic-scoping: your handling of specpdl is naive and
> fundamentally flawed. For multithreading, we will have to completely
> change the implementation technique of dynamic-scoping.
I know but it was the easier way to have quickly a working
proof-of-concept as I concentrated my efforts mainly on the syntax.
Do you have any idea about how dynamic scoping should be handled in a
multi-threaded environment?
> - synchronization to access all the global variables/objects.
> You haven't yet have time to tackle this (other than in `put', it
> seems), and it's going to be difficult.
Why do you think that a global lock (or several ones for separate kind
of data) will not be enough? It is not easy but I think it can be done
in a reasonable time without many troubles.
> - concurrent GC (later to be refined to parallel concurrent GC ;-).
>
> - redisplay in its own thread (later to be refined to one redisplay
> thread per terminal, then per frame, then per window ;-).
I think that this is the most difficult part, a new GC and how handle
redisplay.
Different threads can use the same buffer and a buffer can have no
threads actually using it. I would simplify this part, maybe leave the
redisplay task only to a thread.
> A first step will be to restrict the implementation such that there's no
> parallelism: only one thread executes at any given time (i.e. have
> a single lock and have all thread grab the lock before doing any actual
> work).
IMHO it is better to avoid this middle solution and try to solve
directly the problem, it will not give real benefits and having only one
thread executes at a given time can be done differently, like saving and
restoring the thread call stack. Real threads will not suffer I/O bound
operations and Emacs will be able to use more cores at the same time, if
needed.
Thanks,
Giuseppe
next prev parent reply other threads:[~2008-11-29 21:01 UTC|newest]
Thread overview: 89+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-11-29 13:32 multi-threaded Emacs Giuseppe Scrivano
2008-11-29 20:26 ` Stefan Monnier
2008-11-29 21:01 ` Giuseppe Scrivano [this message]
2008-11-29 22:21 ` Stefan Monnier
2008-11-30 11:35 ` Giuseppe Scrivano
2008-11-30 21:46 ` Stefan Monnier
2008-11-30 22:25 ` Giuseppe Scrivano
2008-11-30 23:03 ` Stefan Monnier
2008-11-30 23:30 ` Giuseppe Scrivano
2008-12-01 3:37 ` Stefan Monnier
2008-12-06 22:50 ` Tom Tromey
2008-12-07 3:31 ` Stefan Monnier
2008-11-29 22:06 ` Tom Tromey
2008-11-30 16:43 ` Richard M Stallman
2008-11-30 17:34 ` Giuseppe Scrivano
2008-11-30 21:51 ` Stefan Monnier
2008-11-30 22:10 ` Giuseppe Scrivano
2008-11-30 22:20 ` Miles Bader
2008-11-30 23:09 ` Stefan Monnier
2008-11-30 23:09 ` Giuseppe Scrivano
2008-12-01 0:10 ` Chetan Pandya
2008-12-01 3:55 ` Stefan Monnier
2008-12-01 14:06 ` Richard M Stallman
2008-12-01 18:57 ` Giuseppe Scrivano
2008-12-01 20:34 ` Stefan Monnier
2008-12-01 22:41 ` joakim
2008-12-02 16:02 ` Richard M Stallman
2008-12-02 22:22 ` Stefan Monnier
2008-12-02 22:41 ` Giuseppe Scrivano
2008-12-03 2:17 ` Stefan Monnier
2008-12-03 18:26 ` Giuseppe Scrivano
2008-12-03 20:14 ` Stefan Monnier
2008-12-05 2:59 ` Richard M Stallman
2008-12-05 7:40 ` Giuseppe Scrivano
2008-12-05 8:20 ` Miles Bader
2008-12-05 9:42 ` Paul R
2008-12-05 10:10 ` Eli Zaretskii
2008-12-05 10:35 ` Paul R
2008-12-05 11:02 ` Helmut Eller
2008-12-05 15:39 ` Stefan Monnier
2008-12-05 16:22 ` Ted Zlatanov
2008-12-05 16:57 ` Tom Tromey
2008-12-06 4:41 ` Miles Bader
2008-12-06 7:44 ` Helmut Eller
2008-12-06 22:31 ` Stefan Monnier
2008-12-06 8:30 ` Richard M Stallman
2008-12-05 15:36 ` Stefan Monnier
2008-12-06 19:25 ` Richard M Stallman
2008-12-06 22:41 ` Stefan Monnier
2008-12-06 23:41 ` Giuseppe Scrivano
2008-12-07 20:51 ` Stefan Monnier
2008-12-07 23:51 ` Giuseppe Scrivano
2008-12-08 3:06 ` Chetan Pandya
2008-12-08 15:50 ` Stefan Monnier
2008-12-07 16:02 ` Richard M Stallman
2008-12-07 20:52 ` Stefan Monnier
2008-12-07 16:15 ` Giuseppe Scrivano
2008-12-08 18:26 ` Richard M Stallman
2008-12-08 19:49 ` Giuseppe Scrivano
2008-12-09 2:15 ` dhruva
2008-12-09 2:49 ` Stephen J. Turnbull
2008-12-09 2:53 ` dhruva
2008-12-09 9:36 ` Andreas Schwab
2008-12-09 17:26 ` Richard M Stallman
2008-12-09 19:10 ` Giuseppe Scrivano
2008-12-10 18:18 ` Richard M Stallman
2008-12-10 18:18 ` Richard M Stallman
2008-12-09 19:40 ` Stefan Monnier
2008-12-10 18:18 ` Richard M Stallman
2008-12-11 1:59 ` Stefan Monnier
2008-12-11 14:41 ` Ted Zlatanov
2008-12-11 18:30 ` Stefan Monnier
2008-12-11 18:42 ` Ted Zlatanov
2008-12-11 19:01 ` Paul R
2008-12-11 20:53 ` Stefan Monnier
2008-12-12 19:03 ` Giuseppe Scrivano
2008-12-13 3:08 ` Stefan Monnier
2008-12-11 19:07 ` Paul R
2008-12-11 20:54 ` Stefan Monnier
2008-12-05 2:59 ` Richard M Stallman
2008-12-05 15:40 ` Stefan Monnier
2008-12-02 23:10 ` Florian Beck
2008-11-30 22:17 ` Miles Bader
2008-11-30 16:44 ` Richard M Stallman
-- strict thread matches above, loose matches on Subject: below --
2008-12-03 7:59 Re[2]: " ak70
2008-12-04 8:45 ` Richard M Stallman
[not found] ` <87prk8mhg9.fsf@vanilla.net.mt>
[not found] ` <E1L8ZUB-0002x3-VT@fencepost.gnu.org>
2008-12-05 13:27 ` Li Lin
[not found] ` <87prk64ilv.fsf@vanilla.net.mt>
2008-12-05 18:37 ` Giuseppe Scrivano
2008-12-06 21:58 ` Magnus Henoch
2008-12-04 13:21 ` Stefan Monnier
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=873ahant5l.fsf@master.homenet \
--to=gscrivano@gnu.org \
--cc=emacs-devel@gnu.org \
--cc=monnier@iro.umontreal.ca \
/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.