Title: Double linked list implementation for asyncio tasks · Issue #107803 · python/cpython · GitHub
Open Graph Title: Double linked list implementation for asyncio tasks · Issue #107803 · python/cpython
X Title: Double linked list implementation for asyncio tasks · Issue #107803 · python/cpython
Description: Currently asyncio tasks are stored in a Weakset, this is inefficient and in some cases causes bugs because of thread safety (#80788). In terms of memory usage it requires maintaining a full set and their corresponding weakref callback to...
Open Graph Description: Currently asyncio tasks are stored in a Weakset, this is inefficient and in some cases causes bugs because of thread safety (#80788). In terms of memory usage it requires maintaining a full set and...
X Description: Currently asyncio tasks are stored in a Weakset, this is inefficient and in some cases causes bugs because of thread safety (#80788). In terms of memory usage it requires maintaining a full set and...
Opengraph URL: https://github.com/python/cpython/issues/107803
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Double linked list implementation for asyncio tasks","articleBody":"Currently `asyncio` tasks are stored in a `Weakset`, this is inefficient and in some cases causes bugs because of thread safety (https://github.com/python/cpython/issues/80788). In terms of memory usage it requires maintaining a full set and their corresponding weakref callback to cleanup objects when deallocated and finalized by the gc. In applications where tasks are created at fast pace this becomes a bottle neck, to mitigate this now `asyncio` tasks will now be stored in a global double linked of tasks for cases where Task is a subclass of `_asyncio.Task` in other cases we still rely on the weakset. This reduces the work done by the gc speedups the execution and reduces memory usage. In some of my own benchmarks I have seen 15- 20% improvement and pyperformance benchmarks reflect roughly the same.\r\n\r\nhttps://github.com/faster-cpython/benchmarking-public/blob/main/results/bm-20230805-3.13.0a0-1d32835/bm-20230805-linux-x86_64-kumaraditya303-linked_list-3.13.0a0-1d32835-vs-base.md\r\n\r\nUpdated: https://github.com/faster-cpython/benchmarking-public/tree/main/results/bm-20240622-3.14.0a0-4717aaa#vs-base\r\n\r\n\u003c!-- gh-linked-prs --\u003e\r\n### Linked PRs\r\n* gh-107804\r\n* gh-120995\r\n* gh-121007\r\n* gh-126577\n\u003c!-- /gh-linked-prs --\u003e\r\n","author":{"url":"https://github.com/kumaraditya303","@type":"Person","name":"kumaraditya303"},"datePublished":"2023-08-09T10:05:59.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":4},"url":"https://github.com/107803/cpython/issues/107803"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:985603f0-3b2a-0789-2b0e-50d682614943 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | 97A6:2EB74F:C3266:10BEBA:696A604F |
| html-safe-nonce | ddb09f9b8f7184d2023195686a0db265b859fc0870074ca2d963ffc5dbe22bef |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI5N0E2OjJFQjc0RjpDMzI2NjoxMEJFQkE6Njk2QTYwNEYiLCJ2aXNpdG9yX2lkIjoiMTI1OTAyMjgyMjQxNDk5MjE1IiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0= |
| visitor-hmac | 07a5e067a9f492c91f22f6145e85185e536a333d779d8047b355123b8514a3da |
| hovercard-subject-tag | issue:1842904343 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/python/cpython/107803/issue_layout |
| twitter:image | https://opengraph.githubassets.com/7533a95743c214cc50b90ed99e2be1f8cc9914d135083d46474a611d0e880639/python/cpython/issues/107803 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/7533a95743c214cc50b90ed99e2be1f8cc9914d135083d46474a611d0e880639/python/cpython/issues/107803 |
| og:image:alt | Currently asyncio tasks are stored in a Weakset, this is inefficient and in some cases causes bugs because of thread safety (#80788). In terms of memory usage it requires maintaining a full set and... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | kumaraditya303 |
| hostname | github.com |
| expected-hostname | github.com |
| None | 9b7735a184970dd9333b2cbe036c8f3c0a9108c64aaa93827c5a64fc70993392 |
| turbo-cache-control | no-preview |
| go-import | github.com/python/cpython git https://github.com/python/cpython.git |
| octolytics-dimension-user_id | 1525981 |
| octolytics-dimension-user_login | python |
| octolytics-dimension-repository_id | 81598961 |
| octolytics-dimension-repository_nwo | python/cpython |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 81598961 |
| octolytics-dimension-repository_network_root_nwo | python/cpython |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 87cbd411c2982752221b5751d583a515b23bf5fa |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width