随笔分类 - [01-1]深入理解Golang语言
摘要:一、sync.WaitGroup简介 1.1 sync.WaitGroup 解决了什么问题 在编程的时候,有时遇到一个大的任务,为了提高计算速度,会用到并发程序,把一个大的任务拆分成几个小的独立的任务各自执行,因为这几个小任务相互没有关系,可以独立执行,这时候就可以用 Go 协程来处理这种并发任务。
阅读全文
摘要:Golang 汇编asm语言基础学习 一、CPU 基础知识 cpu 内部结构 cpu 内部主要是由寄存器、控制器、运算器和时钟四个部分组成。 寄存器:用来暂时存放指令、数据等对象。它是一个更快的内存。cpu 内部一般有 20 - 100 个寄存器。不同类型的cpu,它内部的寄存器数量、种类以及寄存器
阅读全文
摘要:一、Linux系统内存 在说明golang内存分配之前,先了解下Linux系统内存相关的基础知识,有助于理解golang内存分配原理。 1.1 虚拟内存技术 在早期内存管理中,如果程序太大,超过了空闲内存容量,就没有办法把全部程序装入到内存,这时怎么办? 在许多年前,人们采用了一种叫做覆盖技术,这样
阅读全文
摘要:一、TCMalloc TCMalloc简介 为啥要介绍 TCMalloc? 因为golang的内存分配算法绝大部分都是来自 TCMalloc,golang只改动了其中的一小部分。所以要理解golang内存分配算法,就要先了解下TCMalloc,为后面分析golang内存做一做功课。 tcmalloc
阅读全文
摘要:一、背景 在golang中,最主要的一个概念就是并发协程 goroutine,它只需用一个关键字 go 就可以开起一个协程,并运行。 一个单独的 goroutine运行,倒也没什么问题。如果是一个goroutine衍生了多个goroutine,并且它们之间还需要交互-比如传输数据,那彼此怎么传输数据
阅读全文
摘要:一、疑惑开篇 有了map为什么还要搞个sync.map 呢?它们之间有什么区别? 答:重要的一点是,map并发不是安全的。 在Go 1.6之前, 内置的map类型是部分goroutine安全的,并发的读没有问题,并发的写可能有问题。自go 1.6之后, 并发地读写map会报错,这在一些知名的开源库中
阅读全文
摘要:在前面[一节中](https://www.cnblogs.com/jiujuan/p/12735559.html)简单介绍了golang的调度模型-GPM模型,介绍了他们各自的作用。这篇文章就来看看他们的源码结构。 > Go版本:go1.13.9 ## M结构体 M结构体是OS线程的一个抽象,主要负
阅读全文
摘要:一:什么是调度 平常我们在生活中会有哪些调度的例子呢?比如十字路口的红绿灯,它就是一种调度系统。在交通十字路口,每个路口上多多少少有一些车辆,为了限制这些车辆不随意行驶,就建起了红绿灯调度系统。红绿灯可以有序的调度这些车辆行驶,使这些车辆快速的通过路口。 那为什么需要红绿灯来进行调度呢? 1:使车辆
阅读全文
摘要:From: 翻译blog地址 https://blog.lab99.org/post/golang-2017-10-04-video-understanding-channels.html 作者:大桥下的蜗牛 这是GopherCon 2017大会上,go开发专家 kavya Joshi 的一篇关于
阅读全文
摘要:分析接口的赋值,反射,断言的实现原理 版本:golang v1.12 interface底层使用2个struct表示的:eface和iface 一:接口类型分为2个 1. 空接口 //比如 var i interface{} 2. 带方法的接口 //比如 type studenter interfa
阅读全文