Задать вопрос
nextel
@nextel
ненавижу javascript

Как поосмортеть порожденные горутины?

Здравствуйте, вот тестовый скрипкик

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 лянтяев?
  • Вопрос задан
  • 347 просмотров
Подписаться 3 Оценить 1 комментарий
Решения вопроса 2
fastpars
@fastpars
Привет.
1. Горунтина != тред/процес. Go сам решает нужен ли ему тред/процесс.
2. Ваш пример выполняется мгновенно т.к. горунтины не блокируют поток выполнения основной программы main.
Для того чтобы "подождать выполнения всех горутин gorutine()", можно использовать каналы или WaitGroup из пакета sync .
3. Ваш цыкл отработает всего 10 раз т.к. "sum += sum" а не "sum++" и не "sum = sum + 1"
Ответ написан
Комментировать
@AmikoYuki
stackoverflow.com/questions/19094099/how-to-dump-g...
https://golang.org/pkg/runtime/debug/#PrintStack
runtime.NumGoroutine()
А вообще учись гуглить
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы