unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Daniel Mendler <mail@daniel-mendler.de>
To: Eli Zaretskii <eliz@gnu.org>
Cc: 48118@debbugs.gnu.org
Subject: bug#48118: 27.1; 28; Only first process receives output with multiple running processes
Date: Fri, 30 Apr 2021 17:39:35 +0200	[thread overview]
Message-ID: <a190b936-eb10-c9ab-89b1-cbb8bd969650@daniel-mendler.de> (raw)
In-Reply-To: <83o8dvbyyz.fsf@gnu.org>

On 4/30/21 4:59 PM, Eli Zaretskii wrote:
> That's not what I meant.  I meant that if your Lisp program launches a
> subprocess that is known to spill huge amounts of output at high rate,
> and you don't want to starve other subprocesses, your filter function
> can stop the process from time to time to give others an opportunity
> to have their outputs read.

This is true. However I expect Emacs to do that for me. I see the
situation like this - I have multiple packages creating processes and
competing for runtime. Then I expect Emacs to take some kind of
preemptive role and ensure that none of the processes misbehaves.
However one can also take the standpoint that each process should try to
behave well by itself and should be scheduled explicitly; Emacs should
stay out of this business.

>>>> since the underlying Emacs handling of asynchronous processes is
>>>> unable to read from two processes at once?
>>>
>>> No.  The problem is not the _ability_ to read from more than one
>>> subprocess -- the ability does exist.  The problem is that doing so
>>> would run afoul of other scenarios.
>>
>> Which scenarios break?
> 
> For example, if the filter function call accept-process-output.  Or
> does anything else that changes output from which processes is or
> isn't available.

Does this necessarily prevent scheduling? I interpret
`accept-process-output` as a function which prioritizes a process, but I
am unsure if this makes it impossible to implement additional scheduling.

> What does this mean, exactly?  Which quantity should be doled in a
> round-robin fashion? bytes read from the processes? something else?
> 
> If the bytes read, then how do you suggest to handle two processes
> which produce output at very different rates?

For example bytes read or time spent to handle a process (time spent in
the filter function?). If a process has eaten up its time it has to wait
until it gets scheduled next. If you have two process with very
different rates, the slow process may not use up its allotted time slot
and the faster process is still allowed to run.

>> I am not happy with the argument that Emacs cannot do any better than
>> stopping the second process and only handle the first process.
> 
> I'm not saying that Emacs cannot do that, I'm trying to understand
> what that would mean in practice.

Actually I would also like to understand what the best process handling
looks like. When I stumbled over this issue, it astonished me that Emacs
does not seem to do any scheduling at all and handles only a single
process. As far as I know other language runtimes handle this problem
differently, attempting some kind of scheduling.

What is the reason for the current behavior? Is it predictability? If I
understand correctly, Emacs always reads from the first process. If data
arrives, Emacs does not read from the second processes at all. Only if
no data is available from the first process, the second process is
handled. Is it like this?





  reply	other threads:[~2021-04-30 15:39 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-30 13:44 bug#48118: 27.1; 28; Only first process receives output with multiple running processes Daniel Mendler
2021-04-30 14:17 ` Eli Zaretskii
2021-04-30 14:23   ` Daniel Mendler
2021-04-30 14:31     ` Eli Zaretskii
2021-04-30 14:26   ` Eli Zaretskii
2021-04-30 14:30     ` Daniel Mendler
2021-04-30 14:34       ` Eli Zaretskii
2021-04-30 14:45         ` Daniel Mendler
2021-04-30 14:59           ` Eli Zaretskii
2021-04-30 15:39             ` Daniel Mendler [this message]
2021-04-30 15:58               ` Eli Zaretskii
2021-04-30 16:17                 ` Daniel Mendler
2021-04-30 18:06                   ` Eli Zaretskii
2021-05-02  7:23                   ` Lars Ingebrigtsen
2021-05-24 21:05                     ` miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-05-25 11:38                       ` Eli Zaretskii
2021-05-25 15:18                         ` miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-05-25 17:12                           ` Eli Zaretskii
2021-05-25 18:02                             ` miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-05-25 19:02                               ` Lars Ingebrigtsen
2021-06-04 13:34                     ` Philipp
2021-06-04 14:00                       ` Eli Zaretskii
2021-04-30 16:15               ` jakanakaevangeli
2021-04-30 17:52                 ` Eli Zaretskii

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=a190b936-eb10-c9ab-89b1-cbb8bd969650@daniel-mendler.de \
    --to=mail@daniel-mendler.de \
    --cc=48118@debbugs.gnu.org \
    --cc=eliz@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).