Горутины — user-space, потоки — kernel-space. Стек горутины: 2-8KB (растёт), потока: 1-8MB (фиксирован). Переключение горутин: ~100ns (без syscall), потоков: ~1-10μs (context switch в ядре).
Можно запустить миллион горутин, но не миллион потоков. Go-планировщик (GMP) мультиплексирует горутины на небольшое число потоков.
Блокирующие операции (I/O) паркуют горутину, но не тред — тред подхватывает другую горутину.