An I/O-bound task is mostly waiting, for example for an upstream HTTP call. An event loop or many goroutines can overlap thousands of such waits cheaply.