go学习笔记
SilvermingX
这个作者很懒,什么都没留下…
展开
-
Go 中 map 实现原理与源码解析
全文四万多字,包含了对 map 的相关原理还有源码的深度解析,文中的图片大都来自文末的参考文章,如果有哪个地方写的不对,欢迎批评指正!!!Go 中的 map 使用的是链地址法解决哈希冲突,但是它的实现并不是对冲突的元素采用链表存储,而是采用了数组的形式。哈希表相关概念哈希表是计算机科学中的最重要数据结构之一,这不仅因为它 O(1) 的读写性能非常优秀,还因为它提供了键值之间的映射。想要实现一个性能优异的哈希表,需要注意两个关键点 —— 哈希函数和冲突解决方法。哈希函数哈希函数(常被称为散列函数.原创 2020-12-31 14:11:44 · 1687 阅读 · 3 评论 -
Go 内存管理与垃圾回收
Go 语言抛弃了 C/C++ 中的开发者管理内存的方式:主动申请与主动释放,增加了逃逸分析和 GC,这样开发者就能从内存管理中释放出来,有更多的精力去关注软件设计,而不是底层的内存问题。这是 Go 语言成为高生产力语言的原因之一。从非常宏观的角度讲,Go的内存管理是下图这个样子:程序中的数据和变量都会被分配到程序所在的虚拟内存中,内存空间包含两个重要区域 — 栈区(Stack)和堆区(Heap)。函数调用的参数、返回值以及局部变量大都会被分配到栈上,这部分内存会由编译器进行管理;不同编程语言使用不同原创 2020-12-22 00:51:45 · 1581 阅读 · 2 评论 -
goroutine 调度器原理详解
goroutine 调度器的概念说到“调度”,首先会想到操作系统对进程、线程的调度。操作系统调度器会将系统中的多个线程按照一定算法调度到物理 CPU 上去运行。传统的编程语言比如 C、C++ 等的并发实现实际上就是基于操作系统调度的,即程序负责创建线程,操作系统负责调度。尽管线程的调度方式相对于进程来说,线程运行所需要资源比较少,在同一进程中进行线程切换效率会高很多,但实际上多线程开发设计会变得更加复杂,要考虑很多同步竞争等问题,如锁、竞争冲突等。线程是操作系统调度时的最基本单元,而 Linux 在原创 2020-12-08 00:36:09 · 2147 阅读 · 0 评论