From: Ihor Radchenko <yantar92@posteo.net>
To: Eli Zaretskii <eliz@gnu.org>
Cc: emacs-devel@gnu.org
Subject: Re: Concurrency via isolated process/thread
Date: Wed, 05 Jul 2023 12:40:51 +0000 [thread overview]
Message-ID: <87mt0a8rak.fsf@localhost> (raw)
In-Reply-To: <83bkgqk28a.fsf@gnu.org>
Eli Zaretskii <eliz@gnu.org> writes:
>> It may be dumb (I have no experience with processes in C), but I have
>> something like the following in mind:
>>
>> 1. Main Emacs process has a normal Elisp thread that watches for async
>> Emacs process requests.
>> 2. Once a request arrives, asking to get/modify main Emacs process data,
>> the request is fulfilled synchronously and signaled back by writing
>> to memory accessible by the async process.
>
> That solves part of the problem, maybe (assuming we'd want to allow
> shared memory in Emacs).
My idea is basically similar to the current schema of interacting
between process input/output and Emacs. But using data stream rather
than text stream.
Shared memory is one way. Or it may be something like sockets.
It's just that shared memory will be faster, AFAIU.
> ... The other parts -- how to implement async
> process requests so that they don't suffer from the same problem, and
> how to reference objects outside of the shared memory -- are still
> there.
I imagine that there will be a special "remote Lisp object" type.
1. Imagine that child Emacs process asks for a value of variable `foo',
which is a list (1 2 3 4).
2. The child process requests parent Emacs to put the variable value
into shared memory.
3. The parent process creates a new variable storing a link to (1 2 3
4), to prevent (1 . (2 3 4)) cons cell from GC in the parent process
- `foo#'. Then, it informs the child process about this variable.
4. The child process creates a new remote Lisp object #<remote cons foo#>.
5. Now consider that child process tries (setcar #<remote cons foo#> value).
The `setcar' and other primitives will be modified to query parent
process to perform the actual modification to
(#<remote value> . (2 3 4))
6. Before exiting the child thread, or every time we need to copy remote
object, #<remote ...> will be replaced by an actual newly created
traditional object.
>> If nobody goes far enough to discover those,
>> they are probably not the real reason why people do not use Elisp threads.
>
> I'm saying that it could be the other way around: we don't hear about
> those bugs because threads are not used seriously.
I feel like this part of the discussion is not contributing to the main
topic. At the end, it is not critical if Elisp threads are used to
implement the discussed idea. Or timers, or something else.
--
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-05 12:40 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 [this message]
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
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=87mt0a8rak.fsf@localhost \
--to=yantar92@posteo.net \
--cc=eliz@gnu.org \
--cc=emacs-devel@gnu.org \
/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).