
golang
文章平均质量分 61
Jude.Ji
这个作者很懒,什么都没留下…
展开
-
GO的调度器
GPM模型G:Goroutine,创建的协程P:Processor线程栈,用于存放G的M:处理器,一个处理器一个线程栈,用于执行程序抢占调度Go程序启动时,runtime会去启动一个名为sysmon的m(一般称为监控线程)。sysmon每20us~10ms启动一次。释放限制超过5分钟的span物理内存如果超过2分钟没有垃圾回收,强制执行。将长时间未处理的netpoll结果添加到任务队列向长时间运行的G任务发出抢占调度收回因syscall长时间阻塞的ip...原创 2021-09-10 17:54:23 · 239 阅读 · 0 评论 -
golang内存管理及内存逃逸
golang内存管理及内存逃逸内存分配原理mspanmheap的管理内存栈管理分段栈和连续栈分段栈连续栈栈的缩容指令垃圾回收GC算法的种类标记清楚算法三色标记清楚算法步骤:写屏障混合写屏障内存逃逸造成内存逃逸的条件逃逸指令参考内存分配原理在多并发程序中,申请内存资源避免资源竞争,需要加锁机制。为了减少加锁,提高性能,go语言在内存分配中提供mcache,mcentral,mheap三个组件。mcache:管理线程本地缓存的mspanmcentral:管理全局的mspan供所有线程使用,mcache原创 2021-09-10 17:16:02 · 372 阅读 · 0 评论