golang源码分析
文章平均质量分 92
hello_bravo_
这个作者很懒,什么都没留下…
展开
-
go context详解
一.前言之前写过一篇context的源码学习 context 源码学习 ,写完还觉得,嗯,我终于弄懂了context,但是最近在面试,别人一问我只能说个大概,到底还是理解不深,只是看了源码,没有往深层去想,他为什么要这么设计。(坦率的说个人认为面试蛮看缘分,有时候对方问的你恰好了解就撞上了,有时候对方问的你在日常中没有用到,就确实不懂,但是作为面试官是不会故意问一下冷僻的东西的,所以可能面试官问的就是他们研发有用到的东西,那我虽然在当前工作中没有这个场景,但是多学习留个印象,总是好的。)二.正文原创 2022-02-20 11:08:05 · 2549 阅读 · 2 评论 -
golang--内存管理器
一.前言笔者在经过了前期基础学习后,用go语言来实现自己面临的业务问题已经不再是问题,所以拥有了另一方面的求知欲--go语言自身的各种包,各种机制是如何实现的,本章主要在探究go语言的内存分配器,希望能用本文讲清楚go语言内存分配器的机制,帮助大家更好地理解go语言的运行机制。二.简介不同于c语言使用malloc和free来主动管理内存,golang让程序员避免了这一切繁杂的操作,它通过escape analysis来分配内存,通过garbage collection(gc)来回收内存,本文主要原创 2021-07-25 10:41:39 · 475 阅读 · 2 评论 -
golang知识点--reflect
相关知识学习1.go语言的type和interface{}类型go语言是静态类型的语言,这意味着每个变量都有它的静态类型,那是确定且一直固定的一个类型。例如:type MyInt intvar i intvar j MyInt虽然定义了MyInt是int的别名,但是i与j的类型并不是一个类型,除非经过转换。接口概述interface:标识固定的方法集接口变量可以存储任何具...原创 2020-02-22 14:38:34 · 249 阅读 · 0 评论 -
golang源码分析--channel
channel的概念channel是goroutine之间的通信机制,它可以让一个goroutine通过它给另一个goroutine发送数据,每个channel在创建的时候必须指定一个类型,指定的类型是任意的。channel 可以看成一个 FIFO 队列,对 FIFO 队列的读写都是原子的操作,不需要加锁。对channel的操作总结:操作nil channelclosed ch...原创 2020-01-29 15:48:19 · 472 阅读 · 0 评论 -
golang源码分析--map
map概念Go 语言中 map 是一种特殊的数据结构:一种元素对(pair)的无序集合,pair 的一个元素是key,对应的另一个元素是value,所以这个结构也称为关联数组或字典。这是一种快速寻找值的理想结构:给定key,对应的value可以迅速定位。map使用初始化func test1() { map1 := make(map[string]string, 5) map...原创 2020-01-17 19:56:34 · 352 阅读 · 0 评论 -
golang分析--goroutine,进程,线程
概念总览概述定义通讯方式进程一个运行中的程序,资源分配的最小单位管道、信号、共享内存/信号量/消息队列线程轻量级进程,操作系统调度(cpu调度)执行的最小单位互斥锁、条件变量、posix匿名信号量协程轻量级的线程全局变量和锁同步,Channel管道进行数据同步三者联系及区别![在这里插入图片描述](https://img-blog.csdn...原创 2020-01-12 16:27:12 · 907 阅读 · 0 评论 -
golang源码解析--内存mspan,mcache结构体
基本概念mspan简介Go中内存管理的基本单元,是由一片连续的 8KB的页组成的大块内存。注意,这里的页和操作系统本身的页并不是一回事,它一般是操作系统页大小的几倍。一句话概括: mspan是一个包含起始地址、 mspan规格、页的数量等内容的双端链表。关于span的状态:关于mspan的状态转换:当mspan在堆的空闲treap(详情见备注)上,它的状态为mSpanFree当mspa...原创 2020-01-05 10:18:30 · 1824 阅读 · 0 评论 -
golang源码解析--内存总览
看了gc,发现没有内存的知识,光看gc,只能背个流程,其中很多涉及内存的操作,所以先来了解一波内存,然后了解gc的协程,golang的锁,再回头看gc原创 2020-01-04 15:56:32 · 394 阅读 · 0 评论 -
golang源码分析--gc
golang的垃圾回收采用的是 标记-清理(Mark-and-Sweep) 算法就是先标记出需要回收的内存对象快,然后在清理掉;根据源码注释GC的流程如下:gcphase的三个状态_GCoff // GC not running; sweeping in background, write barrier disabled_GCmark // GC marking roots an...原创 2019-12-31 21:53:00 · 787 阅读 · 0 评论 -
golang源码分析--slice
切片基础概念:切片是围绕动态数组的概念构建的,可以按需自动增长和缩小。(注意:切片传递的是指针的拷贝值,所以可以在函数里面修改指针指向的值,对外有影响)切片的自动增长是通过append()函数来实现的切片的底层内存也是在连续块中分配的,所以切片还能获得索引,迭代以及为垃圾回收优化的好处。源码分析:结构体定义type slice struct { array unsafe.Pointe...原创 2019-12-30 20:47:59 · 358 阅读 · 2 评论