tags:

views:

318

answers:

2

I understand that Goroutines are multiplexed onto multiple OS threads so if one should block, such as while waiting for I/O, others continue to run, but is there any way to know ahead of time how many threads I would spawn if I were to create n goroutines?

for example, if we call the funtion below below would we know how many (or the maximum) numbr of system threads would be created for increasing values of n:

type Vector []float64

// Apply the operation to n elements of v starting at i.
func (v Vector) DoSome(i, n int, u Vector, c chan int) {
    for ; i < n; i++ {
        v[i] += u.Op(v[i])
    }
    c <- 1;    // signal that this piece is done
}
+2  A: 

Currently, gccgo will create one thread per goroutine.

I don't know about 6g.

Jurily
+1  A: 

According to Pike's Go Course PDF slides (Day 3):

...if you want user-level parallelism you must set $GOMAXPROCS or call runtime.GOMAXPROCS(n). GOMAXPROCS tells the runtime scheduler how many non-syscall-blocked goroutines to run at once.

Based on this blog post, too, it would seem setting the environment variable GOMAXPROCS lets you fix the number of threads. I'm not sure how to get the default number of threads the runtime will manage if you do not specify this value, however.

This blog post seems to imply that if you do not set the environment variable the runtime will only utilize one core (presumably because it is only using one process.)

fbrereto