Я предполагаю, что под "потоками пользовательского пространства" вы подразумеваете (например) goroutines Go.
Это правда, что использование goroutines для параллелизма менее эффективно, чем разработка (вручную и с помощью научных расчетов) специального алгоритма для назначения рабочих единиц потокам ОС.
Однако: каждая программа Go находится в среде и предназначена для решения конкретной проблемы. Новая процедура может быть запущена для каждого запроса, который окружающая среда делает программе Go. Если среда делает параллельные запросы к программе Go, программа Go, использующая программы, может работать быстрее, чем последовательная программа, даже если программа Go использует только 1 поток ОС. Причина, по которой goroutines могут обрабатывать запросы с большей скоростью (даже при использовании только одного потока ОС), заключается в том, что программа Go автоматически переключится с goroutine A на goroutine B, когда часть среды, связанная с A, на мгновение не сможет ответить.
Но да, это правда, что использование подпрограмм и автоматическое назначение их нескольким потокам ОС менее эффективно, чем разработка (вручную и с помощью научных расчетов) специального алгоритма для назначения рабочих единиц потокам ОС.