From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.ciao.gmane.io!not-for-mail From: Stefan Monnier Newsgroups: gmane.emacs.devel Subject: Re: Questions about throw-on-input Date: Mon, 11 May 2020 14:24:21 -0400 Message-ID: References: <72ec0924-42f3-9f55-7edb-b2f9b678f707@web.de> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Injection-Info: ciao.gmane.io; posting-host="ciao.gmane.io:159.69.161.202"; logging-data="74948"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) Cc: eliz@gnu.org, yyoncho@gmail.com, emacs-devel@gnu.org To: Alexander Miller Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Mon May 11 20:29:42 2020 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jYDBN-000JMX-5f for ged-emacs-devel@m.gmane-mx.org; Mon, 11 May 2020 20:29:41 +0200 Original-Received: from localhost ([::1]:54072 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jYDBM-0002xX-5k for ged-emacs-devel@m.gmane-mx.org; Mon, 11 May 2020 14:29:40 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:43266) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jYD6K-0006mG-Lu for emacs-devel@gnu.org; Mon, 11 May 2020 14:24:29 -0400 Original-Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:3666) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jYD6I-0000hA-DG; Mon, 11 May 2020 14:24:27 -0400 Original-Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id E4ECF10097B; Mon, 11 May 2020 14:24:24 -0400 (EDT) Original-Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id E86BE1000ED; Mon, 11 May 2020 14:24:22 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1589221462; bh=FYiguDXDoqgkFXa+lSw6+6LMEeGra0501hb+xbpaGDQ=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=mTIYgSXXXQoAtYLFeBnPCTTZOsBnbHw44iUkz1VDgiItpVL2tkPEHebnkp8jsUG2F uiN9NoCzZbcwYYhq9Xa7VfVne75p1eEw05Lrvqgby/uWP8ThMEcj0DkotdzgMAXFIa pjxyHeGCxeCq8krOGHG46eCRryyVHK9Kl1Y67sgiuCLtPeWGgqWcMI5kfGTHh7/Fpu I5Kz1Uw9dzjKPcYa/0Z/3h9cRL75ObBxRBWtqsdcIKAIP/my5dtot+c2mzYGB2ftev Gg1Ih+hdMUtCX+AB1wwgoHm00DsypUN55NyPymJozw+OgDhwN1X/cqJSWjkRNzT1w6 DBQUgItoGyAPA== Original-Received: from alfajor (unknown [216.154.3.202]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 8D2C9120298; Mon, 11 May 2020 14:24:22 -0400 (EDT) In-Reply-To: <72ec0924-42f3-9f55-7edb-b2f9b678f707@web.de> (Alexander Miller's message of "Mon, 11 May 2020 19:39:22 +0200") Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-detected-operating-system: by eggs.gnu.org: First seen = 2020/05/11 10:58:52 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.io gmane.emacs.devel:249858 Archived-At: > That could be a game-changer, it would open up the path for making Elisp > a lot more asynchronous than it is now. You could load up heavy work on > a background thread, and (of course assuming it can be slit into smaller > pieces) simply yield whenever input is detected. And when the main > thread has done its part the worker would simply pick up again where it > left off. I think calling `thread-yield` frequently enough should(!) do the trick. No need to call `input-pending-p`. IOW if `thread-yield` doesn't do the trick, you should likely `M-x report-emacs-bug`. > I don't think this is possible right now, other than maybe with > awkwardly pushing around timers and while-no-input, or using mandatory > 1ms pauses instead of proper yielding as in my benchmark, which is > probably not exactly ideal either. Actually a better solution is often to run in a separate process (e.g. via `async.el`). That also lets you use the various CPU cores lying idle ;-) > And while we are on the topic of threads, I wonder what is the > maintainers' opinion on https://nullprogram.com/blog/2018/05/31/, > specifically this part: >> Update: ThreadSanitizer (TSan) quickly shows that Emacs=E2=80=99 threadi= ng >> implementation has many data races, making it completely >> untrustworthy. Until this is fixed, nobody should use Emacs threads >> for any purpose, and threads should disabled at compile time. Sounds very credible, but I'll let someone else take care of this, because it's too far from my area of expertise. Stefan