Thanks Chris

On Monday, October 7, 2019 at 10:40:22 AM UTC-7, Chris Hines wrote:
>
> I am pretty sure that a "proc" in the trace visualization output is the 
> same as a "P" in the parlance of the Go runtime scheduler. In the scheduler 
> an OS thread is an "M" and even when using LockOSThread the locked 
> goroutine and thread need to be paired up with one of the scheduler's Ps in 
> order to execute the goroutine's code. There are always GOMAXPROCS # of Ps 
> in the scheduler. See the comment block starting at line 19 in this code 
> for more detail. https://golang.org/src/runtime/proc.go
>
> Hope that helps,
> Chris
>
> On Sunday, October 6, 2019 at 7:47:43 AM UTC-4, Miki Tebeka wrote:
>>
>> Hi,
>>
>> I'm trying to understand output of the "go tool trace". I'm using 
>> runtime.LockOSThread, however the output of the trace tool shows goroutines 
>> moving between procs (which I *think* are OS threads). What am I missing?
>>
>> Code:
>> package main
>>
>> import (
>> "fmt"
>> "os"
>> "runtime"
>> "runtime/trace"
>> "time"
>> )
>>
>> func sqrt(val float64) (float64, error) {
>> if val < 0.0 {
>> return 0.0, fmt.Errorf("sqrt of negative number")
>> }
>>
>> if val == 0.0 {
>> return 0.0, nil // shortcut
>> }
>>
>> guess, epsilon := 1.0, 0.00001
>> for i := 0; i < 10000; i++ {
>> diff := guess*guess - val
>> if diff < 0 {
>> diff = -diff
>> }
>> if diff <= epsilon {
>> return guess, nil
>> }
>> guess = (val/guess + guess) / 2.0
>> }
>>
>> return 0.0, fmt.Errorf("can't find sqrt of %f", val)
>> }
>>
>> func worker(id int) {
>> runtime.LockOSThread()
>> i := float64(0)
>> for {
>> for n := 0; n < 1000000; n++ {
>> i += 13.2
>> _, err := sqrt(i)
>> if err != nil {
>> panic(err)
>> }
>> }
>> runtime.Gosched()
>> }
>> }
>>
>> func main() {
>> out, err := os.Create("trace.out")
>> if err != nil {
>> panic(err)
>> }
>> defer out.Close()
>> if err := trace.Start(out); err != nil {
>> panic(err)
>> }
>> defer trace.Stop()
>>
>> for i := 0; i < runtime.NumCPU(); i++ {
>> go worker(i)
>> }
>>
>> time.Sleep(3 * time.Second)
>> }
>>
>>
>> What I see in trace:
>>
>> [image: trace-out.png]
>>
>> Thanks,
>> Miki
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/4c5d10e0-134d-41ff-8798-b52c7a4e2313%40googlegroups.com.

Reply via email to