From: Eli Zaretskii <eliz@gnu.org>
To: Lars Ingebrigtsen <larsi@gnus.org>
Cc: layer@franz.com, benjamin.benninghofen@airbus.com,
32729@debbugs.gnu.org, 32728@debbugs.gnu.org
Subject: bug#32728: bug#32729: Xemacs 23 times as fast as GNU Emacs
Date: Sun, 13 Oct 2019 11:13:04 +0300 [thread overview]
Message-ID: <83r23hkqr3.fsf@gnu.org> (raw)
In-Reply-To: <87y2xplufp.fsf@gnus.org> (message from Lars Ingebrigtsen on Sat, 12 Oct 2019 19:55:54 +0200)
> From: Lars Ingebrigtsen <larsi@gnus.org>
> Cc: benjamin.benninghofen@airbus.com, layer@franz.com,
> 32729@debbugs.gnu.org, 32728@debbugs.gnu.org
> Date: Sat, 12 Oct 2019 19:55:54 +0200
>
> >> (Note: Don't visit the " *zeroes*" buffer after this, because that will
> >> hang Emacs totally. I guess the long-line display problem hasn't been
> >> fixed after all?)
> >
> > It's unrelated. Did you try to insert that into a unibyte buffer
> > instead?
>
> Nope. Does Emacs need to do a lot of recomputing when going to
> multibyte buffers?
Of course: we try to display the multibyte text as characters, search
for fonts, invoke bidi reordering, etc.
> >> And it's a real world problem: When reading data from any network
> >> source, you have to use filters because the protocol is usually based on
> >> parsing the output to find out when it's over, so you can't use
> >> sentinels.
> >
> > Why can't you use the default filter, and in the sentinel work on the
> > buffer with the complete response?
>
> No sentinel is called, because the process status doesn't change,
> typically. All the relevant network protocols do not close after having
> "done something" (IMAP, HTTP, etc), but instead use in-protocol markers
> to say that an operation is done. So a filter has to be used.
OK, so not in sentinel, but in a timer or somesuch.
> > Please also note that, GC aside, inserting stuff of size that is
> > unknown in advance is not free, either: we need to enlarge the buffer
> > text each time more stuff arrives.
>
> Yes, I was wondering about that -- how slow is resizing buffers, really?
> Does Emacs rely on OS-level realloc that doesn't necessitate actually
> copying all that data all the time?
Not necessarily realloc, sometimes mmap or similar. And yes, this
requires copying the data when the OS cannot grow the previous
allocation, but instead gives us a memory block at another address.
In most systems this copying is under the hood, but it does happen.
> Also -- some of the networking operations know in advance how much data
> is going to be received. For instance, when using non-chunked HTTP
> (quite common when fetching "data", i.e., images, PDFs etc), we get the
> content size in a header. Would it make sense to have a way to tell
> Emacs about this in advance so that it could pre-size the buffer?
We could provide a Lisp interface for such cases. The C
implementation is in enlarge_buffer_text (but we need to remember the
decoding of human-readable text, when applicable).
However, I would begin by measuring the effect of this resizing on the
time it takes to receive large amounts of data. Maybe other factors
make this part negligible.
next prev parent reply other threads:[~2019-10-13 8:13 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-09-13 13:32 bug#32729: Xemacs 23 times as fast as GNU Emacs Benninghofen, Benjamin Dr.
2019-10-12 3:57 ` Lars Ingebrigtsen
2019-10-12 7:39 ` bug#32728: " Eli Zaretskii
2019-10-12 17:55 ` Lars Ingebrigtsen
2019-10-13 8:13 ` Eli Zaretskii [this message]
2019-10-13 17:36 ` bug#32728: " Lars Ingebrigtsen
2019-10-14 8:18 ` Eli Zaretskii
2019-10-14 8:36 ` bug#32728: " Lars Ingebrigtsen
2019-10-14 9:15 ` Eli Zaretskii
2019-10-13 17:47 ` Lars Ingebrigtsen
2019-10-13 18:46 ` Eli Zaretskii
2019-10-14 8:54 ` Lars Ingebrigtsen
2019-10-14 10:18 ` bug#32728: " Eli Zaretskii
2019-10-25 6:38 ` Benninghofen, Benjamin Dr.
2019-10-25 7:00 ` Eli Zaretskii
2019-10-13 10:49 ` Phil Sainty
2019-10-13 17:24 ` bug#32728: " Lars Ingebrigtsen
2019-10-13 18:44 ` 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=83r23hkqr3.fsf@gnu.org \
--to=eliz@gnu.org \
--cc=32728@debbugs.gnu.org \
--cc=32729@debbugs.gnu.org \
--cc=benjamin.benninghofen@airbus.com \
--cc=larsi@gnus.org \
--cc=layer@franz.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).