{"slug": "rayon", "name": "Rayon", "category": "dev-libs", "category_name": "Libraries and frameworks", "description": "", "recommenders": 1, "commenters": 3, "warners": 0, "score": 1.495, "rising": -0.33, "first": "2026-07-15", "latest": "2026-07-16", "why": "For genuine CPU-bound work, submitting to a Rayon worker pool is the way to go.", "why_is_quote": true, "has_verdict": false, "sentiment": {"recommend": 1, "neutral": 2, "compare": 0, "warn": 0}, "spark": [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], "listed": false, "loved": [], "caveat": "", "short_quote": "For genuine CPU-bound work, submitting to a Rayon worker pool is the way to go.", "icon": false, "domain": null, "github_repo": null, "official_url": "", "pricing": "", "aliases": ["Rayon"], "verdict": null, "praise": [{"label": "", "summary": "", "quotes": [{"id": 782893728, "item_id": 48930858, "url": "https://news.ycombinator.com/item?id=48930858", "by": "diarrhea", "date": "2026-07-15", "stance": "recommend", "quote": "For genuine CPU-bound work, submitting to a Rayon worker pool is the way to go.", "excerpt": "Funnily enough, spawn_blocking is not the right tool here. It is meant for blocking I/O, such as DNS lookups, where your platform might not give you anything better. For genuine CPU-bound work, submitting to a Rayon worker pool is the way to go. It solved a runtime starvation issue for us at work, spawn_blocking did not work. The reason for all this is spawn_blocking having a very large underlying thread pool, in the", "context": "", "use_case": "CPU-bound work pool", "switched_from": "", "story": "The Tokio/Rayon Trap and Why Async/Await Fails Concurrency"}]}], "caveats": [], "who": [], "tags": [], "use_cases": ["throughput parallelism", "work-stealing parallelism", "cpu-bound work pool"], "compared": [{"slug": "tokio", "name": "Tokio", "co": 2, "switched_from": 0, "switched_to": 0}], "makers": [], "threads": [{"url": "https://news.ycombinator.com/item?id=48929587", "title": "The Tokio/Rayon Trap and Why Async/Await Fails Concurrency", "mentions": 3}], "sentiment_by_month": {"2025-11": {}, "2025-12": {}, "2026-01": {}, "2026-02": {}, "2026-03": {}, "2026-04": {}, "2026-05": {}, "2026-06": {}, "2026-07": {"recommend": 1, "neutral": 2}, "2026-08": {}, "2026-09": {}, "2026-10": {}}, "quotes": [{"id": 782921857, "item_id": 48932616, "url": "https://news.ycombinator.com/item?id=48932616", "by": "poly2it", "date": "2026-07-16", "stance": "neutral", "quote": "Rayon optimises for throughout, not latency.", "excerpt": "Rayon optimises for throughout, not latency. If you want to ensure a maximum latency cadence, use something like micropool: https://github.com/DouglasDwyer/micropool. Here is an interesting video about it: https://youtu.be/QFQkqFSg8Z4.", "context": "", "use_case": "throughput parallelism", "switched_from": "", "story": "The Tokio/Rayon Trap and Why Async/Await Fails Concurrency"}, {"id": 782900385, "item_id": 48931274, "url": "https://news.ycombinator.com/item?id=48931274", "by": "elendilm", "date": "2026-07-16", "stance": "neutral", "quote": "We use rayon where cache locality penalty is minor compared to the millisecond latency gains due to work stealing", "excerpt": "I am now trembling at the thought of warriors who will skin me alive :). Jokes aside, there are use cases for rayon, use cases for tokio async, use cases for \"may\" coroutines, use cases for a custom scheduling policy, or use cases for a combination of these. We went with \"may\" coroutines (with its thread pinning) + custom numa work pinning (to a may thread) due to \"may's\" lightweight nature and not having to have our", "context": "", "use_case": "work-stealing parallelism", "switched_from": "", "story": "The Tokio/Rayon Trap and Why Async/Await Fails Concurrency"}, {"id": 782893728, "item_id": 48930858, "url": "https://news.ycombinator.com/item?id=48930858", "by": "diarrhea", "date": "2026-07-15", "stance": "recommend", "quote": "For genuine CPU-bound work, submitting to a Rayon worker pool is the way to go.", "excerpt": "Funnily enough, spawn_blocking is not the right tool here. It is meant for blocking I/O, such as DNS lookups, where your platform might not give you anything better. For genuine CPU-bound work, submitting to a Rayon worker pool is the way to go. It solved a runtime starvation issue for us at work, spawn_blocking did not work. The reason for all this is spawn_blocking having a very large underlying thread pool, in the", "context": "", "use_case": "CPU-bound work pool", "switched_from": "", "story": "The Tokio/Rayon Trap and Why Async/Await Fails Concurrency"}]}