emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: run-with-timer vs run-with-idle-timer


From: Thien-Thi Nguyen
Subject: Re: run-with-timer vs run-with-idle-timer
Date: Sat, 12 May 2018 19:37:45 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux)

() João Távora <address@hidden>
() Fri, 11 May 2018 11:39:16 +0100

   After thinking a bit about it, you're totally right, and it
   becomes much simpler (read below).

Cool, simpler (if it still works) is better.

   > I suppose it's a matter of style.

   Maybe not, maybe [while CONDITION] is indeed more efficient,
   since it amounts to far fewer calls to accept-process-output.

It's less efficient up until the point CONDITION is no longer
satisfied (since it has to compute/check CONDITION).  But past
that point, it's infinitely more efficient for the reason you
give.

   > able to play multiple games simultaneously (i.e., run
   > multiple independent child processes), and greedily
   > spinning borks that.

   Since from Emacs's perspective we're both blocking, you must
   mean that you have less CPU available for the subprocesses,
   right?

I don't really know what i meant, actually.  I think it was just
my ego trying to sound bigger than my memory would permit.  You
will forgive the fool curmudgeon a lapse here and there, right?
It's been a long time since i used the verb "bork"... /pleading

The truth is that ‘gnugo--q’ is synchronous by design (it says
so right in the comment about ‘:srs’, after all -- but who reads
comments, anyway?!) and does indeed block (since 1st arg to
‘accept-process-output’ is specified) until input appears.

That said, top-level (user interaction) control only passes to
‘gnugo--q’ via ‘run-at-time’, which normally fires after two
seconds, plenty of time (even on this old computer) for Emacs to
move its pointers around.  Too, because the action is captured
in a timer object, Emacs has even more of a free hand to diddle
w/ its scheduling.  To sum up, spinning is what is going on,
true, but "greedily" maybe not so much.  Really, it's more like
bowing to the four corners of the earth (once) than spinning...

   > [...] seeing a skeleton of the code [...]

   If you haven't yet connected the dots, this is for my new
   mode eglot.el from the other thread.

Ah OK.  Sounds interesting!

   Since it is very new, I think I'm just going to apply your
   suggestion (diff below).

Cool.

   It works fine and the code becomes tighter, though it still
   doesn't solve the original problem that makes the idle-timer
   not kick in in the meantime.  (Later, I can explain more
   about why I need that, and how I'm working around it).

OK.

-- 
Thien-Thi Nguyen -----------------------------------------------
 (defun responsep (query)
   (pcase (context query)
     (`(technical ,ml) (correctp ml))
     ...))                              748E A0E8 1CB8 A748 9BFA
--------------------------------------- 6CE4 6703 2224 4C80 7502

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]