From: "Stephen J. Turnbull" <stephen@xemacs.org>
To: Lennart Borgman <lennart.borgman@gmail.com>
Cc: Tom Tromey <tromey@redhat.com>,
Daniel Colascione <dan.colascione@gmail.com>,
rms@gnu.org, emacs-devel@gnu.org
Subject: Re: Patch for fields of `struct buffer'
Date: Wed, 02 Feb 2011 01:19:39 +0900 [thread overview]
Message-ID: <87tygn3exw.fsf@uwakimon.sk.tsukuba.ac.jp> (raw)
In-Reply-To: <AANLkTinDn4Z1sFo8o+kNbpwgt3avjeUgg2gP2fR7XJAb@mail.gmail.com>
Lennart Borgman writes:
> On Tue, Feb 1, 2011 at 1:10 PM, Stephen J. Turnbull <stephen@xemacs.org> wrote:
> > Daniel Colascione writes:
> >
> > > The world is increasingly moving toward parallel processing,
> >
> > Since when does parallel processing == threads?
>
> I am a computer illiterate sometimes. Could you give us some hints
> about the current status?
Well, that's actually what I was asking Daniel. I'm not sure how
illiterate you think you are, so please try not to be insulted if it's
all too basic.
By *definition*, both threads and processes are ways of multitasking
which allow various forms of "parallel processing", such as multi-CPU
processing and time-slicing. There are other forms of parallel
processing, such as GPUs on the video card and DMA for I/O, but these
are rather specialized.
In *theory*, both threads and processes should be capable of being
distributed across processors, and AFAIK they both work pretty well in
practice each with its advantages and disadvantages.
The specific difference between threads and processes is that threads
share all resources of a single process *except* the instruction
counter, and thus can communicate with each other with maximum
efficiency. Processes do not share resources with each other, and
thus it is impossible (absent an OS or hardware bug) for one process
to stomp on another's resources, thus providing maximum safety for
each task. In fact there are intermediate possibilities, for example
shared memory allows two separate processes to access the same
memory. Any variables stored in that area are efficiently
communicated between the processes.
Now, in practice threads require protection from each other, just as
processes do when accessing disk (thus the infamous "stale lock"
problem in CVS and Subversion, which many workflows for dVCSes can
reduce to almost zero). If you allocate a resource on the heap (often
called "consing" in Lisp, and is commonly extended to resources other
than Lisp conses), then in theory only a thread hold a pointer to it
can access it, thus providing some protection. However, a wild
pointer "for (p = memory; ; p++) { write(stuff,p); }" can trash
another thread's private resources, while this can't happen with
processes.
The problem with threads as I see it, and I believe this is why
Richard and Guido express pessimism too, is that Lisp objects tend to
get all linked together. Tasks that follow the links and mutate the
objects are likely to interfere with each other, but that is a very
common pattern in dynamic languages. In Python, this is handled with
the GIL, or global interpreter lock.[1] In many circumstances, a thread
must grab that lock, excluding all other threads from running. This
also is somewhat expensive in terms of CPU AIUI. Many proposals have
been made to remove the GIL from Python, but (so far) they all fall
down because it turns out that keeping track of lots of "local" locks
is either very expensive, or deadlock-prone. (The "STM" that I
mentioned in connection with Haskell and Simon Peyton-Jones is more or
less a technique for automatically managing "local" locks, and has
been applied successfully in some projects.)
Of course, processes also involve high costs, specifically the cost of
context switching when interrupting one process and starting another,
and the cost of copying shared data back and forth between the
cooperating processes.
But on balance my intuition (FWIW, probably not much in this case :-)
is that threads are fundamentally a low-level, performance-oriented
implementation of the high-level abstraction "concurrent task", and
that there's a severe impedence mismatch with Lisp, especially Emacs
Lisp.
Footnotes:
[1] I refer here to the mainline Python written in C. Jython and
IronPython are based on different virtual machines which don't have
GILs.
next prev parent reply other threads:[~2011-02-01 16:19 UTC|newest]
Thread overview: 123+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-01-27 20:18 Patch for fields of `struct buffer' Tom Tromey
2011-01-28 7:37 ` Eli Zaretskii
2011-01-28 8:58 ` Tom Tromey
2011-01-28 9:29 ` Eli Zaretskii
2011-01-29 12:50 ` Eli Zaretskii
2011-01-29 13:33 ` Juanma Barranquero
2011-01-29 13:42 ` Eli Zaretskii
2011-02-02 18:17 ` Juanma Barranquero
2011-02-02 19:51 ` Eli Zaretskii
2011-01-28 14:55 ` Stefan Monnier
2011-01-28 17:38 ` Tom Tromey
2011-01-28 18:27 ` Stefan Monnier
2011-01-28 18:42 ` Tom Tromey
2011-01-28 20:04 ` Stefan Monnier
2011-01-28 17:23 ` Kim F. Storm
2011-01-28 17:36 ` Tom Tromey
2011-01-28 18:29 ` Stefan Monnier
2011-01-29 2:34 ` Miles Bader
2011-01-29 3:58 ` Stefan Monnier
2011-01-29 16:18 ` Richard Stallman
2011-01-30 20:23 ` Tom Tromey
2011-01-31 4:04 ` Stefan Monnier
2011-01-31 14:29 ` Tom Tromey
2011-01-31 15:22 ` Stefan Monnier
2011-01-31 15:30 ` Tom Tromey
2011-01-31 17:02 ` Stefan Monnier
2011-01-31 18:38 ` Tom Tromey
2011-01-31 20:03 ` Stefan Monnier
2011-01-31 20:00 ` Stefan Monnier
2011-01-31 20:05 ` Tom Tromey
2011-01-31 20:40 ` Stefan Monnier
2011-01-31 16:46 ` David De La Harpe Golden
2011-01-31 19:04 ` Tom Tromey
2011-01-31 22:08 ` David De La Harpe Golden
2011-02-01 10:54 ` Daniel Colascione
2011-02-07 2:34 ` Tom Tromey
2011-02-07 19:48 ` concurrency suggestions for Gnus (was: Patch for fields of `struct buffer') Ted Zlatanov
2011-02-08 4:31 ` concurrency suggestions for Gnus Miles Bader
2011-02-08 12:55 ` Andy Moreton
2011-02-08 12:55 ` Justin Lilly
2011-02-08 14:41 ` bloom filters (was: concurrency suggestions for Gnus) Ted Zlatanov
2011-02-08 15:15 ` Stephen J. Turnbull
2011-02-10 8:17 ` concurrency suggestions for Gnus Lars Ingebrigtsen
2011-02-01 15:43 ` Patch for fields of `struct buffer' Stefan Monnier
2011-02-01 16:28 ` Helmut Eller
2011-02-07 2:47 ` Tom Tromey
2011-02-07 2:44 ` Tom Tromey
2011-02-07 8:05 ` Helmut Eller
2011-02-07 19:23 ` Richard Stallman
2011-02-08 16:30 ` Tom Tromey
2011-02-08 16:26 ` Tom Tromey
2011-02-08 17:57 ` Helmut Eller
2011-02-11 21:59 ` Tom Tromey
2011-02-12 9:16 ` Helmut Eller
2011-02-08 21:10 ` Stefan Monnier
2011-01-31 19:38 ` Richard Stallman
2011-02-01 18:26 ` Tom Tromey
2011-02-01 19:28 ` Paul Eggert
2011-02-01 19:42 ` Tom Tromey
2011-02-09 10:16 ` Jim Meyering
2011-02-10 4:42 ` Miles Bader
2011-02-01 20:34 ` Andreas Schwab
2011-02-01 21:56 ` Tom Tromey
2011-02-01 21:59 ` Tom Tromey
2011-02-02 0:44 ` Paul Eggert
2011-02-02 3:49 ` Stefan Monnier
2011-02-02 16:26 ` Tom Tromey
2011-02-02 16:37 ` Stefan Monnier
2011-02-08 15:07 ` Tom Tromey
2011-02-08 21:02 ` Stefan Monnier
2011-02-08 21:08 ` Tom Tromey
2011-02-08 21:21 ` Tom Tromey
2011-02-09 21:32 ` Stefan Monnier
2011-02-08 21:58 ` Andreas Schwab
2011-02-01 22:21 ` Stefan Monnier
2011-02-08 16:38 ` Tom Tromey
2011-02-11 21:48 ` Tom Tromey
2011-02-12 2:25 ` Stefan Monnier
2011-01-31 19:37 ` Richard Stallman
2011-01-31 19:57 ` Tom Tromey
2011-02-01 2:42 ` Tom Tromey
2011-02-01 4:09 ` Eli Zaretskii
2011-02-01 16:40 ` Richard Stallman
2011-02-01 16:44 ` Tom Tromey
2011-02-02 2:42 ` Richard Stallman
2011-01-31 20:30 ` Stefan Monnier
2011-01-31 20:49 ` Tom Tromey
2011-01-31 21:54 ` Stefan Monnier
2011-02-13 19:01 ` Richard Stallman
2011-02-14 17:47 ` Stefan Monnier
2011-02-14 19:34 ` Lennart Borgman
2011-02-15 15:58 ` Richard Stallman
2011-02-15 20:41 ` Stefan Monnier
2011-02-01 16:39 ` Richard Stallman
2011-02-01 12:09 ` Stephen J. Turnbull
2011-02-02 2:41 ` Richard Stallman
2011-02-01 10:26 ` Daniel Colascione
2011-02-01 12:10 ` Stephen J. Turnbull
2011-02-01 14:23 ` Lennart Borgman
2011-02-01 16:19 ` Stephen J. Turnbull [this message]
2011-02-01 17:08 ` Lennart Borgman
2011-02-01 19:57 ` Daniel Colascione
2011-02-01 20:06 ` Daniel Colascione
2011-02-01 16:41 ` Richard Stallman
2011-02-01 16:51 ` Tom Tromey
2011-02-02 2:42 ` Richard Stallman
2011-02-02 4:16 ` Tom Tromey
2011-02-02 5:04 ` Stefan Monnier
2011-02-11 21:51 ` Tom Tromey
2011-02-12 23:28 ` Richard Stallman
2011-02-13 20:26 ` Installing `struct buffer' patch (Was: Patch for fields of `struct buffer') Tom Tromey
2011-02-14 16:42 ` Installing `struct buffer' patch Chong Yidong
2011-02-14 16:48 ` Tom Tromey
2011-02-14 16:52 ` Chong Yidong
2011-02-14 16:58 ` Tom Tromey
2011-02-14 17:36 ` Stefan Monnier
2011-02-15 15:50 ` Chong Yidong
2011-02-16 14:55 ` Tom Tromey
2011-02-15 15:57 ` Richard Stallman
2011-02-15 4:07 ` Glenn Morris
2011-02-15 14:28 ` Tom Tromey
2011-02-01 20:04 ` Patch for fields of `struct buffer' Daniel Colascione
2011-02-02 2:43 ` Richard Stallman
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=87tygn3exw.fsf@uwakimon.sk.tsukuba.ac.jp \
--to=stephen@xemacs.org \
--cc=dan.colascione@gmail.com \
--cc=emacs-devel@gnu.org \
--cc=lennart.borgman@gmail.com \
--cc=rms@gnu.org \
--cc=tromey@redhat.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.