美文网首页工作生活
(十) golang 临时对象池

(十) golang 临时对象池

作者: 杰克慢 | 来源:发表于2019-07-01 14:40 被阅读0次

为什么Pool中需要这么多poolLocal对象呢?实际上,Pool是给每个线程分配了一个poolLocal对象。也就是说local数组的长度,就是工作线程的数量(size := runtime.GOMAXPROCS(0))。当多线程在并发读写的时候,通常情况下都是在自己线程的poolLocal中存取数据。当自己线程的poolLocal中没有数据时,才会尝试加锁去其他线程的poolLocal中“偷”数据。

package main

import (
    "fmt"
    "sync"
)

func main() {
    p := &sync.Pool{
        New: func() interface{} {
            return 0
        },
    }

    a := p.Get().(int)
    p.Put(1)
    p.Put(2)
    b := p.Get().(int)
    d := p.Get().(int)
    fmt.Println(a, b, d)
}
0 1 2
package main

import (
    "fmt"
    "runtime"
    "sync"
)

func main() {
    p := &sync.Pool{
        New: func() interface{} {
            return 0
        },
    }

    a := p.Get().(int)
    p.Put(1)
    runtime.GC()
    b := p.Get().(int)
    fmt.Println(a, b)
}
0 0

https://www.jb51.net/article/150769.htm

https://www.jianshu.com/p/2bd41a8f2254

相关文章

  • (十) golang 临时对象池

    为什么Pool中需要这么多poolLocal对象呢?实际上,Pool是给每个线程分配了一个poolLocal对象。...

  • Golang学习 - sync 包

    临时对象池 Pool 用于存储临时对象,它将使用完毕的对象存入对象池中,在需要的时候取出来重复使用,目的是为了避免...

  • golang sync.Pool

    临时对象池   当多个goroutine都需要创建同一个对象的时候,如果goroutine过多,可能导致对象的创建...

  • sync

    sync包有以下几个内容:(1)sync.Pool 临时对象池(2)sync.Mutex...

  • golang sync.pool对象复用 并发原理 缓存池

    golang sync.pool对象复用 并发原理 缓存池 在go http每一次go serve(l)都会构建R...

  • golang workpool , 工作池

    gowp golang worker pool ,线程池 , 工作池 并发限制goroutine池。 限制任务执行...

  • go的临时对象池--sync.Pool

    一个sync.Pool对象就是一组临时对象的集合。Pool是协程安全的。Pool用于存储那些被分配了但是没有被使用...

  • 说说golang的对象池sync.Pool

    网上关于sync.Pool的源码分析的文章比较多,本文的重点不在于源码分析,而在于简单易懂的介绍一下sync.Po...

  • Android优化

    代码优化 1.避免产生不必要的对象 对象的创建从来都不是免费的. 一个使用线程分配池的通用垃圾回收器可以让临时对象...

  • 5. go 连接池

    redis 连接池说明: 说明:通过 golang 对redis 操作,还可以通过redis 连接池,流程如下: ...

网友评论

    本文标题:(十) golang 临时对象池

    本文链接:https://www.haomeiwen.com/subject/ovmgcctx.html