From: Ihor Radchenko <yantar92@posteo.net>
To: Gregory Heytings <gregory@heytings.org>
Cc: Eli Zaretskii <eliz@gnu.org>, luangruo@yahoo.com, emacs-devel@gnu.org
Subject: Re: Concurrency via isolated process/thread
Date: Thu, 13 Jul 2023 14:23:36 +0000 [thread overview]
Message-ID: <87fs5rnb4n.fsf@localhost> (raw)
In-Reply-To: <489f350ce60aea470c35@heytings.org>
Gregory Heytings <gregory@heytings.org> writes:
> It's not completely clear (to me) what you mean by "locking". But I
> assume you mean two operations lock/unlock with which a thread can request
> and waive exclusive access to an object, and sleeps until that exclusive
> access is granted. IOW, mutexes.
Yes. Although mutexes are not the only way to achieve this.
> If my guess is correct, that is not
> possible. You cannot use mutexes in a program whose data structures have
> not been organized in a way that makes the use of such synchronization
> primitives possible, without having deadlocks. Given that in Emacs
> objects are part of an enormous unstructured graph, with pointers leading
> from anywhere to anywhere, that's clearly not the case, and all you can
> use is a single global lock.
I do not think so.
There is usually no need to ensure that a given Elisp object is locked
recursively, with all the linked objects (like all elements in a list).
We just need to ensure that we protect individual Lisp_Object's from
data races.
>> But the very need to access global Elisp variables/objects from async
>> threads should not be considered a good practice (except near start/end
>> of thread execution). Most of processing should be done using threads'
>> local lexical scope.
>
> ... if what you have in mind are async threads that should in fact not
> access objects of the main thread, why is it necessary to lock
> objects?
> You can prepare the arguments to the async thread in the main thread,
> start the async thread, and when its execution completes process the
> return values of the async thread in the main thread, which is what
> emacs-async already does.
> May I ask you if you have a concrete example of a task that you would like
> to perform with such threads, and that cannot already be done with
> emacs-async? In other words, what are the limitations of emacs-async you
> try to overcome?
You cannot pass non-printable objects like (like markers of buffer). You
cannot pass Emacs local state, like user customization, except a small
subset. You have to go through print/read loop to pass the objects
around. You have to deal with startup overheads and large memory
overheads associated with creating a new Emacs process.
Examples:
1. Background parsing of large buffers, where you cannot afford to pass
the whole buffer and parser state back-and-forth every time the user
makes changes.
2. Searching across multiple buffers, while keeping all the buffer-local
customizations (including runtime, this-session-only, customizations)
honored.
3. Stealth fontification of buffers. Not just on idle, but
asynchronously.
4. Doing something as basic as loop parallelism on multiple CPUs for
CPU-heavy processing. (passing the data between Emacs process would
defer the whole purpose here - that's inter-process communication
overheads + sexp parsing !!!)
5. The very async process communication where process sentinels are not
trivial and have to utilize significant CPU processing.
6. Basically, anything more complex than what can be done using a bunch
of foo& + wait() in bash.
--
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>
next prev parent reply other threads:[~2023-07-13 14:23 UTC|newest]
Thread overview: 192+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-04 16:58 Concurrency via isolated process/thread Ihor Radchenko
2023-07-04 17:12 ` Eli Zaretskii
2023-07-04 17:29 ` Ihor Radchenko
2023-07-04 17:35 ` Eli Zaretskii
2023-07-04 17:52 ` Ihor Radchenko
2023-07-04 18:24 ` Eli Zaretskii
2023-07-05 11:23 ` Ihor Radchenko
2023-07-05 11:49 ` Eli Zaretskii
2023-07-05 12:40 ` Ihor Radchenko
2023-07-05 13:02 ` Lynn Winebarger
2023-07-05 13:10 ` Ihor Radchenko
2023-07-06 18:35 ` Lynn Winebarger
2023-07-07 11:48 ` Ihor Radchenko
2023-07-05 13:33 ` Eli Zaretskii
2023-07-05 13:35 ` Ihor Radchenko
2023-07-05 0:34 ` Po Lu
2023-07-05 11:26 ` Ihor Radchenko
2023-07-05 12:11 ` Po Lu
2023-07-05 12:44 ` Ihor Radchenko
2023-07-05 13:21 ` Po Lu
2023-07-05 13:26 ` Ihor Radchenko
2023-07-05 13:51 ` Eli Zaretskii
2023-07-05 14:00 ` Ihor Radchenko
2023-07-06 0:32 ` Po Lu
2023-07-06 10:46 ` Ihor Radchenko
2023-07-06 12:24 ` Po Lu
2023-07-06 12:31 ` Ihor Radchenko
2023-07-06 12:41 ` Po Lu
2023-07-06 12:51 ` Ihor Radchenko
2023-07-06 12:58 ` Po Lu
2023-07-06 13:13 ` Ihor Radchenko
2023-07-06 14:13 ` Eli Zaretskii
2023-07-06 14:47 ` Ihor Radchenko
2023-07-06 15:10 ` Eli Zaretskii
2023-07-06 16:17 ` Ihor Radchenko
2023-07-06 18:19 ` Eli Zaretskii
2023-07-07 12:04 ` Ihor Radchenko
2023-07-07 13:16 ` Eli Zaretskii
2023-07-07 14:29 ` Ihor Radchenko
2023-07-07 14:47 ` Eli Zaretskii
2023-07-07 15:21 ` Ihor Radchenko
2023-07-07 18:04 ` Eli Zaretskii
2023-07-07 18:24 ` Ihor Radchenko
2023-07-07 19:36 ` Eli Zaretskii
2023-07-07 20:05 ` Ihor Radchenko
2023-07-08 7:05 ` Eli Zaretskii
2023-07-08 10:53 ` Ihor Radchenko
2023-07-08 14:26 ` Eli Zaretskii
2023-07-09 9:36 ` Ihor Radchenko
2023-07-09 9:56 ` Po Lu
2023-07-09 10:04 ` Ihor Radchenko
2023-07-09 11:59 ` Eli Zaretskii
2023-07-09 13:58 ` Ihor Radchenko
2023-07-09 14:52 ` Eli Zaretskii
2023-07-09 15:49 ` Ihor Radchenko
2023-07-09 16:35 ` Eli Zaretskii
2023-07-10 11:30 ` Ihor Radchenko
2023-07-10 12:13 ` Po Lu
2023-07-10 12:28 ` Ihor Radchenko
2023-07-10 12:48 ` Po Lu
2023-07-10 12:53 ` Ihor Radchenko
2023-07-10 13:18 ` Po Lu
2023-07-10 13:09 ` Eli Zaretskii
2023-07-10 13:58 ` Ihor Radchenko
2023-07-10 14:37 ` Eli Zaretskii
2023-07-10 14:55 ` Ihor Radchenko
2023-07-10 16:03 ` Eli Zaretskii
2023-07-16 14:58 ` Ihor Radchenko
2023-07-17 7:55 ` Ihor Radchenko
2023-07-17 8:36 ` Po Lu
2023-07-17 8:52 ` Ihor Radchenko
2023-07-17 9:39 ` Po Lu
2023-07-17 9:54 ` Ihor Radchenko
2023-07-17 10:08 ` Po Lu
2023-07-24 8:42 ` Ihor Radchenko
2023-07-24 9:52 ` Po Lu
2023-07-24 10:09 ` Ihor Radchenko
2023-07-24 12:15 ` Po Lu
2023-07-24 12:25 ` Ihor Radchenko
2023-07-24 13:31 ` Po Lu
2023-07-24 13:53 ` Ihor Radchenko
2023-07-25 0:12 ` Po Lu
2023-07-25 4:28 ` Ihor Radchenko
2023-07-24 12:50 ` Eli Zaretskii
2023-07-24 13:15 ` Ihor Radchenko
2023-07-24 13:41 ` Eli Zaretskii
2023-07-24 14:13 ` Ihor Radchenko
2023-07-24 12:44 ` Eli Zaretskii
2023-07-24 13:02 ` Ihor Radchenko
2023-07-24 13:54 ` Eli Zaretskii
2023-07-24 14:24 ` Ihor Radchenko
2023-07-24 16:00 ` Eli Zaretskii
2023-07-24 16:38 ` Ihor Radchenko
2023-07-25 0:20 ` Po Lu
2023-07-25 4:36 ` Ihor Radchenko
2023-07-25 7:27 ` Po Lu
2023-07-25 7:59 ` Ihor Radchenko
2023-07-25 8:27 ` Po Lu
2023-07-25 8:45 ` Ihor Radchenko
2023-07-25 8:53 ` Po Lu
2023-07-25 9:03 ` Ihor Radchenko
2023-07-25 9:17 ` Po Lu
2023-07-25 9:27 ` Ihor Radchenko
2023-07-25 9:37 ` Po Lu
2023-07-25 12:40 ` Eli Zaretskii
2023-07-25 11:29 ` Eli Zaretskii
2023-07-25 11:52 ` Ihor Radchenko
2023-07-25 14:27 ` Eli Zaretskii
2023-07-09 17:13 ` Gregory Heytings
2023-07-10 11:37 ` Ihor Radchenko
2023-07-13 13:54 ` Gregory Heytings
2023-07-13 14:23 ` Ihor Radchenko [this message]
2023-07-07 0:21 ` Po Lu
2023-07-06 14:08 ` Eli Zaretskii
2023-07-06 15:01 ` Ihor Radchenko
2023-07-06 15:16 ` Eli Zaretskii
2023-07-06 16:32 ` Ihor Radchenko
2023-07-06 17:50 ` Eli Zaretskii
2023-07-07 12:30 ` Ihor Radchenko
2023-07-07 13:34 ` Eli Zaretskii
2023-07-07 15:17 ` Ihor Radchenko
2023-07-07 19:31 ` Eli Zaretskii
2023-07-07 20:01 ` Ihor Radchenko
2023-07-08 6:50 ` Eli Zaretskii
2023-07-08 11:55 ` Ihor Radchenko
2023-07-08 14:43 ` Eli Zaretskii
2023-07-09 9:57 ` Ihor Radchenko
2023-07-09 12:08 ` Eli Zaretskii
2023-07-09 14:16 ` Ihor Radchenko
2023-07-09 15:00 ` Eli Zaretskii
2023-07-09 12:22 ` Po Lu
2023-07-09 13:12 ` Eli Zaretskii
2023-07-10 0:18 ` Po Lu
2023-07-08 0:51 ` Po Lu
2023-07-08 4:18 ` tomas
2023-07-08 5:51 ` Po Lu
2023-07-08 6:01 ` tomas
2023-07-08 10:02 ` Ihor Radchenko
2023-07-08 19:39 ` tomas
2023-07-08 6:25 ` Eli Zaretskii
2023-07-08 6:38 ` Ihor Radchenko
2023-07-08 7:45 ` Eli Zaretskii
2023-07-08 8:16 ` Ihor Radchenko
2023-07-08 10:13 ` Eli Zaretskii
2023-07-07 13:35 ` Po Lu
2023-07-07 15:31 ` Ihor Radchenko
2023-07-08 0:44 ` Po Lu
2023-07-08 4:29 ` tomas
2023-07-08 7:21 ` Eli Zaretskii
2023-07-08 7:48 ` Po Lu
2023-07-08 10:02 ` Eli Zaretskii
2023-07-08 11:54 ` Po Lu
2023-07-08 14:12 ` Eli Zaretskii
2023-07-09 0:37 ` Po Lu
2023-07-09 7:01 ` Eli Zaretskii
2023-07-09 7:14 ` Po Lu
2023-07-09 7:35 ` Eli Zaretskii
2023-07-09 7:57 ` Ihor Radchenko
2023-07-09 8:41 ` Eli Zaretskii
2023-07-10 14:53 ` Dmitry Gutov
2023-07-09 9:25 ` Po Lu
2023-07-09 11:14 ` Eli Zaretskii
2023-07-09 11:23 ` Ihor Radchenko
2023-07-09 12:10 ` Po Lu
2023-07-09 13:03 ` Eli Zaretskii
2023-07-08 12:01 ` Ihor Radchenko
2023-07-08 14:45 ` Eli Zaretskii
2023-07-07 0:41 ` Po Lu
2023-07-07 12:42 ` Ihor Radchenko
2023-07-07 13:31 ` Po Lu
2023-07-07 0:27 ` Po Lu
2023-07-07 12:45 ` Ihor Radchenko
2023-07-06 0:27 ` Po Lu
2023-07-06 10:48 ` Ihor Radchenko
2023-07-06 12:15 ` Po Lu
2023-07-06 14:10 ` Eli Zaretskii
2023-07-06 15:09 ` Ihor Radchenko
2023-07-06 15:18 ` Eli Zaretskii
2023-07-06 16:36 ` Ihor Radchenko
2023-07-06 17:53 ` Eli Zaretskii
2023-07-07 0:22 ` Po Lu
2023-07-05 0:33 ` Po Lu
2023-07-05 2:31 ` Eli Zaretskii
2023-07-17 20:43 ` Hugo Thunnissen
2023-07-18 4:51 ` tomas
2023-07-18 5:25 ` Ihor Radchenko
2023-07-18 5:39 ` Po Lu
2023-07-18 5:49 ` Ihor Radchenko
2023-07-18 12:14 ` Hugo Thunnissen
2023-07-18 12:39 ` Async IO and queing process sentinels (was: Concurrency via isolated process/thread) Ihor Radchenko
2023-07-18 12:49 ` Ihor Radchenko
2023-07-18 14:12 ` Async IO and queing process sentinels Michael Albinus
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
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87fs5rnb4n.fsf@localhost \
--to=yantar92@posteo.net \
--cc=eliz@gnu.org \
--cc=emacs-devel@gnu.org \
--cc=gregory@heytings.org \
--cc=luangruo@yahoo.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 public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).