Возвращаясь в тему...
TinyGo всегда использует только 1 процессор!
И если это нужно, то он диспетчирует N горутин на 1 процессор, подменяя параллельное выполнение конкурентным.
Новый, чуть исправленный вариант gorut.go:
Код: Выделить всё
package main
import (
"fmt"
"os"
"runtime"
"strconv"
"time"
)
func main() {
ветви := 5
debug := false
if len(os.Args) > 1 {
threads, err := strconv.Atoi(os.Args[1])
if err == nil {
ветви = threads
}
if ветви < 0 {
debug = true
ветви = -ветви
}
}
runtime.GOMAXPROCS(-1)
println("вижу процессоров: ", runtime.NumCPU())
const delay = 100
println("ветвей:", ветви, "длительностью:", delay, "ms")
done := make(chan bool)
t0 := time.Now()
for i := 0; i < ветви; i++ {
i := i
go func() {
defer func() {
done <- true
}()
t0, t1 := time.Now(), time.Now()
for t1.Sub(t0).Milliseconds() < delay {
t1 = time.Now()
}
if debug {
fmt.Printf("%02d завершился\n", i)
}
}()
}
for i := 0; i < ветви; i++ { // ожидание завершения всех
<-done
}
fmt.Printf("все %02d ветвей завершились, полное время: %v\n",
ветви, time.Now().Sub(t0))
}