New submission from Yury Selivanov <yseliva...@gmail.com>: Key observation: 99.9% of the time Futures and Tasks have only one callback.
Currently we have a list of callbacks in each Future/Task. We can avoid list object allocation if we add a field to store the first callback. This way we'll only need to ever allocate the list if a Future/Task has more than one done callbacks. asyncio with the proposed patch applied shows that 3-6% better performance of an asyncio echo server implemented using asyncio.streams. This benchmark involves quite a bit of other Python code, so this improvement is actually quite significant. The patch consists of: 1. first callback / callbacks list refactoring. 2. a free list implementation for Future.__await__ objects (which are created on almost all awaits in asyncio). 3. a big cleanup of the code, ensuring that Future/Task are always initialized properly. ---------- assignee: yselivanov components: asyncio messages: 308481 nosy: asvetlov, yselivanov priority: normal severity: normal status: open title: Optimize asyncio.Future schedule/add/remove callback versions: Python 3.7 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue32348> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com