我们都知道,一个 goroutine 要想真正运行就必须先与某个 P 产生关联。遴选真题也就是说,一个正在运行的 goroutine 必然会关联着某个 P。在程序调用临时对象池的Put方法或Get方法的时候,总会先试图从该临时对象池的本地池列表中,获取与之对应的本地池,依据的就是与当前的 goroutine 关联的那个 P 的 ID。
换句话说,一个临时对象池的Put方法或Get方法会获取到哪一个本地池,完全取决于调用它的代码所在的 goroutine 关联的那个 P。先试图把新的临时对象,存储到对应的本地池的private字段中,以便在后面获取临时对象的时候,可以快速地拿到一个可用的值。
只有当这个private字段已经存有某个值时,遴选真题该方法才会去访问本地池的shared字段。只有当这个private字段的值为nil时,它才会去访问本地池的shared字段。
一个本地池的shared字段原则上可以被任何 goroutine 中的代码访问到,不论这个 goroutine 关联的是哪一个 P 只有当这个private字段的值为nil时,它才会去访问本地池的shared字段。lx.gongxuanwang.com/lxzt/lxbszt…