При вызове runtime.GOMAXPROCS(1) в режиме runtime будет использовать только один поток для всех ваших goroutines. Когда вы делаете io, ваши goroutines выйдут и пусть другие горуты будут работать в одном и том же потоке.
Это похоже на то, как функция .net Async CTP делает совместную concurrency, если вы не используете фоновый поток.
Мой вопрос в том, какое преимущество или недостаток вы могли бы подумать об одном методе над другим.