Ответ
В Go можно эффективно выполнять задачи на одном ядре, используя горутины и планировщик Go. Хотя физически параллелизма нет, горутины создают иллюзию параллельного выполнения за счёт кооперативной многозадачности.
func worker(id int) {
for i := 0; i < 3; i++ {
fmt.Printf("Worker %d: %dn", id, i)
runtime.Gosched() // Явно уступаем выполнение
}
}
func main() {
for i := 1; i <= 2; i++ {
go worker(i)
}
time.Sleep(time.Second)
}
Ключевые моменты:
- Горутины легковесны (2KB стек)
- Планировщик переключает горутины при блокирующих операциях или явном вызове
runtime.Gosched() - Можно использовать
GOMAXPROCS=1для принудительного выполнения на одном ядре
Такой подход полезен для IO-bound задач или когда нужно избежать накладных расходов на переключение потоков.