@@ -1997,11 +1997,19 @@ Optimizations
19971997asyncio
19981998-------
19991999
2000- * :mod: `asyncio ` now uses double linked list implementation for native tasks
2001- which speeds up execution by 10% on standard pyperformance benchmarks and
2002- reduces memory usage.
2000+ * :mod: `asyncio ` has new per-thread double linked list implementation internally for
2001+ :ref: `native tasks <asyncio.Task >`which speeds up execution by 10-20% on standard
2002+ pyperformance benchmarks and reduces memory usage.
2003+ This enables external introspection tools such as
2004+ :ref:`python -m asyncio pstree <whatsnew314-asyncio-introspection>`
2005+ to introspect the call graph of asyncio tasks running in all threads.
20032006 (Contributed by Kumar Aditya in :gh: `107803 `.)
20042007
2008+ * :mod: `asyncio ` has first class support for :term: `free-threading builds <free threading> `.
2009+ This enables parallel execution of multiple event loops across different threads and scales
2010+ linearly with the number of threads.
2011+ (Contributed by Kumar Aditya in :gh: `128002 `.)
2012+
20052013* :mod: `asyncio ` has new utility functions for introspecting and printing
20062014 the program's call graph: :func: `asyncio.capture_call_graph ` and
20072015 :func: `asyncio.print_call_graph `.
@@ -2083,7 +2091,6 @@ Deprecated
20832091 * :class: `asyncio.WindowsProactorEventLoopPolicy `
20842092 * :func: `asyncio.get_event_loop_policy `
20852093 * :func: `asyncio.set_event_loop_policy `
2086- * :func: `asyncio.set_event_loop `
20872094
20882095 Users should use :func: `asyncio.run ` or :class: `asyncio.Runner ` with
20892096 *loop_factory * to use the desired event loop implementation.
0 commit comments