On Thu, May 14, 2020 at 9:28 AM <overexcha...@gmail.com> wrote:

> I learnt that,
>
> the reason we have context(`P`) introduced in Goruntime, is that we can
> hand them off(it's LRQ of goroutines) to other OS thread(say `M0`), if the
> running OS thread(`M1`) needs to block for some reason.
>
>
> [image: Untitled.png]
>
>
> ------------------------------
>
> Above, we see a thread(`M1`) giving up its context so that another
> thread(`M0`) can run it. The Go scheduler makes sure there are enough
> threads to run all contexts(`P1`, `P2`, `P3` etc..).
>
>
> ----------------
>
> Above model is `M:N` [threading model](
> https://cs.stackexchange.com/questions/1074/what-is-the-purpose-of-mn-hybrid-threading),
> where each OS thread(`M1`) running on CPU core(`C`) assigned a context(`P`)
> having `K` goroutines in it's LRQ.
>
> vis-a-vis
>
> `1:1` threading model, where each core(`C`) has one OS thread(`M`).
> `pthread_create()`.
>
> Comparing above two threading models, context switching of go-routines(in
> `M:N` threading model) is much faster than context-switching of OS
> threads(in `1:1` threading model)
>
> --------------------------
>
> To understand the purpose of context(`P`),
>
> what is the advantage of handing off context(`P1`) to other thread(say
> `M2`) running on core(`C2`)?
>
> Is the advantage about efficiency in re-using cache lines(L1/L2) on core
> `C2`, for the related set of goroutines sitting in LRQ of context(`P1`)?
>


What do you mean when you write  context(`P`)?  By that do you simply mean
what the runtime package calls a P?  A P is a logical processor; see the
long comment at the top of runtime/proc.go.

Ian

-- 
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/CAOyqgcXkVNR1%2B19zUCCD-p%3DS4epb7ysV4ZEnJmJ7XAcVi3U_-g%40mail.gmail.com.

Reply via email to