Unclear… revise… “it requires a lock & unlock for every get and put of an item"
> On Mar 6, 2019, at 5:31 PM, robert engels <reng...@ix.netcom.com> wrote: > > Any use of sync.Pool is kind of a misuse in my opinion. If you review the > code, it requires unlock/lock to get/put an item - not very cheap, and not > great for highly concurrent situations - best to only use it for objects that > are shared that are very expensive to instantiate, or unshared pools - but > these are probably more efficient with a local free list. > > So for uses like highly mutable binary trees - Go’s lack of a generational > garbage collector really hurts. > >> On Mar 6, 2019, at 4:03 PM, 'Isaac Gouy' via golang-nuts >> <golang-nuts@googlegroups.com <mailto:golang-nuts@googlegroups.com>> wrote: >> >> Is this a misuse of sync.Pool? >> >> How would a Go programmer re-write the ugly `t.left =` `self.left =` ? >> >> >> package main >> >> import ( >> "fmt" >> "sync" >> ) >> >> type Node struct { >> left, right *Node >> } >> >> var pool = sync.Pool { >> New: func() interface{} { >> return &Node{} >> }, >> } >> >> func bottomUpTree(depth int) *Node { >> if depth <= 0 { >> return pool.Get().(*Node) >> } >> var t = pool.Get().(*Node) >> t.left = bottomUpTree(depth-1) >> t.right = bottomUpTree(depth-1) >> return t >> } >> >> func (self *Node) itemCheck() int { >> if self.left == nil { >> return 1 >> } >> var check = 1 + self.left.itemCheck() + self.right.itemCheck() >> pool.Put(self.left) >> self.left = nil >> pool.Put(self.right) >> self.right = nil >> return check >> } >> >> func main() { >> const stretchDepth = 22 >> check := bottomUpTree(stretchDepth).itemCheck() >> fmt.Printf("stretch tree of depth %v\t check: %v\n", stretchDepth, >> check) >> } >> >> >> >> -- >> 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 >> <mailto:golang-nuts+unsubscr...@googlegroups.com>. >> For more options, visit https://groups.google.com/d/optout >> <https://groups.google.com/d/optout>. > -- 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. For more options, visit https://groups.google.com/d/optout.