I think I know part of the answer. I tried to summarize my understanding of the differences, in order of importance, between asyncio tasks and goroutines:

1) Unlike under asyncio, one rarely needs to worry that their goroutine will block for too long. OTOH, memory sharing across goroutines is akin to memory sharing across threads rather than asyncio tasks since goroutine execution order guarantees are much weaker (even if the hardware has only a single core).

asyncio will only switch context on explicit await, yield and certain event loop methods, while Go runtime may switch on far more subtle triggers (such as certain function calls). So asyncio is perfectly cooperative, while goroutines are only mostly cooperative (and the roadmap suggests they will become even less cooperative over time).

A really tight loop (such as with numeric computation) could still block Go runtime (well, the thread it's running on). If it happens, it's going to have less of an impact than in python - unless it occurs in mutliple threads.

2) Goroutines are have off-the-shelf support for parallel computation, which would require a more sophisticated approach under asyncio.

Go runtime can run threads in parallel (if multiple cores are available), and so it's somewhat similar to running multiple asyncio event loops in a thread pool under a GIL-less python runtime, with a language-aware load balancer in front.

3) Go runtime will automatically handle blocking syscalls in a separate thread; this needs to be done explicitly under asyncio (e.g., using run_in_executor).

That said, in terms of memory cost, goroutines are very much like asyncio tasks rather than threads.

Answer from max on Stack Overflow
Top answer
1 of 2
12

I think I know part of the answer. I tried to summarize my understanding of the differences, in order of importance, between asyncio tasks and goroutines:

1) Unlike under asyncio, one rarely needs to worry that their goroutine will block for too long. OTOH, memory sharing across goroutines is akin to memory sharing across threads rather than asyncio tasks since goroutine execution order guarantees are much weaker (even if the hardware has only a single core).

asyncio will only switch context on explicit await, yield and certain event loop methods, while Go runtime may switch on far more subtle triggers (such as certain function calls). So asyncio is perfectly cooperative, while goroutines are only mostly cooperative (and the roadmap suggests they will become even less cooperative over time).

A really tight loop (such as with numeric computation) could still block Go runtime (well, the thread it's running on). If it happens, it's going to have less of an impact than in python - unless it occurs in mutliple threads.

2) Goroutines are have off-the-shelf support for parallel computation, which would require a more sophisticated approach under asyncio.

Go runtime can run threads in parallel (if multiple cores are available), and so it's somewhat similar to running multiple asyncio event loops in a thread pool under a GIL-less python runtime, with a language-aware load balancer in front.

3) Go runtime will automatically handle blocking syscalls in a separate thread; this needs to be done explicitly under asyncio (e.g., using run_in_executor).

That said, in terms of memory cost, goroutines are very much like asyncio tasks rather than threads.

2 of 2
1

I suppose you could think of it working that way underneath, sure. It's not really accurate, but, close enough.

But there is a big difference: in Go you can write straight line code, and all the I/O blocking is handled for you automatically. You can call Read, then Write, then Read, in simple straight line code. With Python asyncio, as I understand it, you need to queue up a function to handle the reads, rather than just calling Read.

🌐
Hacker News
news.ycombinator.com › item
Goroutines and Async-Await are two very different takes on the same problem. In ... | Hacker News
May 7, 2019 - In C# or Python 3, each function is colored as either sync or async. You can quite easily call an async function from a sync context, but doing a blocking sync call from an async context is forbidden (although possible) · In Go there is no such distinction: you just write your functions in ...
Discussions

Go vs Python async?
I've used Python Twisted and Go (usually stdlib). Twisted is aptly named. I'd never program the backend of an API in Twisted again. We have a couple of teams who maintain a system that are in Flask. I've put in a few PRs to it. I find it way harder to read and navigate Flask code than Go. Maybe a fancy IDE would help. /me shrugs. Go has first class concurrency and that is the major selling point for the services that we write. Go's static typing lets me skip a whole class of tests I would have to write in python. "This thing param should be a list; did we get a list or a string here?" Python is much better with things that deal with numbers. Math in Go can be a pain. Also, dealing with JSON is much more pleasant for a developer in Python, though it is good in Go as soon as you write all the "convert the payload to JSON code" because you then have static typing again. I found Go to be a pain with "incoming API request, fetch JSON data from multiple dependencies, merge it together with some formatting, and return JSON. Lots of intermediate structs. More on reddit.com
🌐 r/golang
14
21
October 29, 2017
Soft question: async-io vs goroutine-csp
What are example of problems that are easy to solve via goroutine-csp but messy to solve via rust/async-io ? More on users.rust-lang.org
🌐 users.rust-lang.org
0
0
June 22, 2021
Have there some like Goroutines in Python 3.13 or maybe 3.14
I’m referring to A Tour of Go and I’m not saying that we must use the go keyword but should be fine to have something to manage the multithreading automatically, but… which should be the approach? More on discuss.python.org
🌐 discuss.python.org
0
0
May 15, 2024
node.js - async-await vs goroutines + channel, which is better performence for handling many WebSocket connection? - Stack Overflow
most people think that goroutine is better than async/await. because goroutines combine parallel and concurrent. but what I know is that node js itself is not really a single thread. because every ... More on stackoverflow.com
🌐 stackoverflow.com
🌐
YouTube
youtube.com › dev internals
1. Golang goroutines vs Python asyncio (part 1) - YouTube
In this first video we are going to explore concurrent programming with unique approach. First we will write our code with Golang concurrent programming tech...
Published   October 21, 2020
Views   169
🌐
Reddit
reddit.com › r/golang › go vs python async?
r/golang on Reddit: Go vs Python async?
October 29, 2017 -

For anyone who's tried both Go and Python async (ex uvloop + sanic, apistar, etc) for their webapp, what are the pros and cons of working in each language?

🌐
PeerDH
peerdh.com › blogs › programming-insights › goroutines-vs-asyncio-performance-benchmarks
Goroutines Vs Asyncio Performance Benchmarks – peerdh.com
September 20, 2024 - Goroutines: Can handle thousands of concurrent requests with minimal overhead. Asyncio: Also performs well but may struggle with very high concurrency due to Python's Global Interpreter Lock (GIL).
🌐
LinkedIn
linkedin.com › pulse › mastering-concurrency-goroutines-python-coroutines-asgi-fadi-zaboura
Mastering Concurrency: Goroutines, Python Coroutines, ASGI vs. WASGI, ASGI Server Workers, and Demystifying Concurrency, Threads, and Parallelism
August 12, 2023 - In both Goroutines and Python Coroutines, handling multiple asynchronous tasks efficiently is vital for performance. The examples above showcase how to initiate and manage multiple tasks simultaneously using concurrency primitives like channels and asyncio.Queue.
🌐
PeerDH
peerdh.com › blogs › programming-insights › comparing-gos-goroutines-and-pythons-asyncio
Comparing Go's Goroutines And Python's Asyncio – peerdh.com
October 5, 2024 - They can handle thousands of concurrent operations without significant overhead. On the other hand, asyncio shines in I/O-bound scenarios. It allows for efficient handling of multiple I/O operations without blocking the main thread.
Find elsewhere
🌐
Johal AI Hub
johal.in › go-concurrency-python-asyncio-trio-alternatives-comparison-2025
Go Concurrency Python asyncio: Trio Alternatives Comparison 2025
November 22, 2025 - Imagine scaling a 5G-powered IoT ... breaking a sweat—Go's lightweight goroutines achieve this with sub-millisecond scheduling overhead, while Python's asyncio struggles at 10x higher latency under load, and Trio emerges as ...
🌐
Quora
quora.com › Are-Python-coroutines-and-Go-goroutines-the-same
Are Python coroutines and Go goroutines the same? - Quora
The Python coroutines operate within an async/await programming model. Go goroutines use a synchronous channel based programming model. Python coroutines are still limited in concurrency by the Global interpreter lock.
🌐
DEV Community
dev.to › bobfang1992_0529 › async-programming-faster-but-how-much-faster-3hl1
Async Programming: faster, but how much faster? - DEV Community
December 14, 2021 - TL;DR: Python asyncio is about 3.5 times faster than threading. Golang is very performant and has better scalability.
🌐
DEV Community
dev.to › swizzard › is-pythons-asyncio-worth-it--24lk
Is Python’s asyncio Worth It? - DEV Community
March 11, 2018 - Now there’s asyncio, which seems better, but still inferior to goroutines or Clojure’s core.async (which is basically goroutines), or the plethora of options presented by e.g.
🌐
YouTube
youtube.com › watch
Goroutines vs Asyncio: Choosing the Best for CPU-Bound Tasks Explained - YouTube
In this video, we dive into the world of concurrency by comparing Goroutines in Go and Asyncio in Python, specifically focusing on their performance in handl...
Published   December 19, 2024
🌐
Rust Programming Language
users.rust-lang.org › t › soft-question-async-io-vs-goroutine-csp › 61370
Soft question: async-io vs goroutine-csp - The Rust Programming Language Forum
June 22, 2021 - What are example of problems that are easy to solve via goroutine-csp but messy to solve via rust/async-io ?
🌐
Eli Bendersky
eli.thegreenplace.net › 2018 › go-hits-the-concurrency-nail-right-on-the-head
Go hits the concurrency nail right on the head - Eli Bendersky's website
You can think of goroutines as threads, it's a fairly good mental model. They are truly cheap threads - because the Go runtime implements launching them and switching between them without deferring to the OS kernel.
🌐
Python.org
discuss.python.org › python help
Have there some like Goroutines in Python 3.13 or maybe 3.14 - Python Help - Discussions on Python.org
May 15, 2024 - I’m referring to A Tour of Go and I’m not saying that we must use the go keyword but should be fine to have something to manage the multithreading automatically, but… which should be the approach?
🌐
Nexedi
nexedi.com › NXD-Presentation.Multicore.PyconFR.2018
Multi-core Python HTTP faster than Go
November 5, 2020 - A multi-core Python HTTP server (much) faster than Go (spoiler: Cython)
🌐
Quora
quora.com › Is-async-await-in-Node-js-similar-to-Goroutines
Is async/await in Node.js similar to Goroutines? - Quora
Answer (1 of 5): Node.js has the very most rudimentary form of concurrency, through non-blocking I/O. Basically, you bind a callback and go do another thing, when the I/O finishes, it triggers the callback. async/await and Promises are nothing but an abstraction on top of that. Go is an entirel...
🌐
Hacker News
news.ycombinator.com › item
Python Coroutines with Async and Await | Hacker News
May 21, 2015 - First issue - the necessity for at least two of each method: "DoSomething" and "DoSomethingAsync". Weak. Now as a library developer, you just doubled your work. Sure, sometimes one method could wrap the other. But it's still weak sauce · I much prefer the Go model - you only code "sync" API's, ...