![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Golang
文章平均质量分 94
Aeiu
这个作者很懒,什么都没留下…
展开
-
Golang map实现原理及源码分析
本文涉及到的源码版本为Go SDK 1.16.11、map的基本结构 map是Golang中的一种常用数据结构,其本质上是一种哈希表,类似于 java 的 HashMap以及Python的字典(dict),是一种存储键值对(Key-Value)的数据结构。一般的Map会包含两个主要结构:数组:数组里的值指向一个链表 链表:目的解决hash冲突的问题,并存放键值 而在Golang中,解决hash冲突的不是链表,而是数组(既内存中的连续空间),而且使用了两个...原创 2021-07-14 20:29:31 · 563 阅读 · 0 评论 -
Golang 调度器相关
1、Golang调度器设计思想调度器的有两大思想:复用线程:协程本身就是运行在一组线程之上,不需要频繁的创建、销毁线程,而是对线程的复用。在调度器中复用线程还有2个体现:1)work stealing,当本线程无可运行的G时,尝试从其他线程绑定的P偷取G,而不是销毁线程。2)hand off,当本线程因为G进行系统调用阻塞时,线程释放绑定的P,把P转移给其他空闲的线程执行。利用并行:GOMAXPROCS设置P的数量,当GOMAXPROCS大于1时,就最多有GOMAXPROCS个...原创 2021-06-30 20:13:31 · 148 阅读 · 0 评论 -
Golang GC/垃圾回收机制
1、简介Golang GC 算法使用的是无无分代(对象没有代际之分)、不整理(回收过程中不对对象进行移动与整理)、并发(与用户代码并发执行)的三色标记清扫算法。原因在于:对象整理的优势是解决内存碎片问题以及“允许”使用顺序内存分配器。但 Go 运行时的分配算法基于tcmalloc,基本上没有碎片问题。 并且顺序内存分配器在多线程的场景下并不适用。Go 使用的是基于tcmalloc的现代内存分配算法,对对象进行整理不会带来实质性的性能提升。 分代 GC 依赖分代假设,即 GC 将主要的回收目标...原创 2021-06-30 18:39:05 · 449 阅读 · 0 评论