深入浅出Golang中的syncPool |
||||||
+ 目录学习到的内容: 1.一个64位的int类型值,充分利用高32位和低32位,进行相关加减以及从一个64位中拆出高32位和低32位. 扩展:如何自己实现一个无锁队列.
2.内存相关操作以及优化
一、原理分析
1.1 结构依赖关系图下面是相关源代码,不过是已经删减了对本次分析没有用的代码.
?
1.2 用图让代码说话
1.3 Put过程分析Put 过程分析比较重要,因为这里会包含pool所有依赖相关分析. 总的分析学习过程可以分为下面几个步骤: 1.获取 2. 3.如果当前协程获取到当前 4.读写内存优化. 数组直接操作内存,而不经过Golang 充分利用 获取P对应的poolLocal
?
从上面代码我们可以看到,Go通过 Put 进入poolDequeue队列: Go在Push时,会通过 通过下面代码,我们可以看到,Go通过逻辑运算判断队列是否满的设计时非常巧妙的,如果后续我们去开发组件,也是可以这么进行设计的。
?
Get实现逻辑: 其实我们看了
二、学习收获如何自己实现一个无锁队列. 本文未实现,后续文章会进行实现.
2.1 如何自己实现一个无锁队列横向思考,并未进行实现,后续会进行实现“
到此这篇关于深入浅出Golang中的sync.Pool的文章就介绍到这了,更多相关Golang sync.Pool内容请搜索陆零网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持陆零网络! |