package main
func gorutine(){
for{
time.Sleep(10000*time.Second)
}
}
func main() {
sum := 1
for sum < 1000 {
sum += sum
go gorutine()
}
//ждем пока они выспятся все
}
все просто, создаем 1000 горутин, и все они спят, так вот ГДЕ ОНИ ВСЕ?? ну то есть htop их не видно, ps-ejH тоже, как посмотреть где все эти 1000 лянтяев?
Горутины это не процессы, вы их не увидите в топе. Если у вас код именно такой, как приведенный здесь, то программа просто завершится почти сразу, ибо вы не ждете завершения горутин. Посмотреть их всех можно если вызвать трейс или панику, вам вывалит огромный список горутин,у каждой будет указано место в коде, где она остановилась.
Привет.
1. Горунтина != тред/процес. Go сам решает нужен ли ему тред/процесс.
2. Ваш пример выполняется мгновенно т.к. горунтины не блокируют поток выполнения основной программы main.
Для того чтобы "подождать выполнения всех горутин gorutine()", можно использовать каналы или WaitGroup из пакета sync .
3. Ваш цыкл отработает всего 10 раз т.к. "sum += sum" а не "sum++" и не "sum = sum + 1"