杨 阳
Published on undefined in 暂未分类 with 杨 阳

11 2023 档案

摘要:当m在执行某个g的时候,g非常耗时,例如一个for循环,每次循环sleep1分钟,循环1000次。 这个例子看似无聊,却是很难解决的,成功的避开了2个系统切换时机。 如果这个时候,一直执行这个g,别的g就会得不到执行,例如有g是处理用户支付的,这样就会造成收钱不积极。 协程饥饿问题 本地队列 本地队 阅读全文
posted @ 2023-11-30 22:15 杨阳的技术博客 阅读(271) 评论(0) 推荐(0) 编辑
摘要:go的协程和线程都绕不过GMP,关于GMP基本的工作流程,有go开发经验的大致都懂,这边更多关注GMP如何解决一些类似 协程饥渴的问题,以及底层的大致实现原理。 多线程循环 上篇讲了单线程是如何循环的,这里还是为 GMP的出场 大致介绍下。 工作模型 多个M都去全局G的队列中获取 g,所以,全局g的 阅读全文
posted @ 2023-11-30 18:10 杨阳的技术博客 阅读(111) 评论(0) 推荐(0) 编辑
摘要:协程与线程 线程在创建、切换、销毁时候,需要消耗CPU的资源。 协程就是将一段程序的运行状态打包, 可以在线程之间调度。减少CPU在操作线程的消耗 协程、线程、进程 这块网上非常多文章讲了,就不多叙述了。 归纳下: 进程用分配内存空间 线程用来分配CPU时间 协程用来精细利用线程 协程的本质是一段包 阅读全文
posted @ 2023-11-30 12:21 杨阳的技术博客 阅读(219) 评论(0) 推荐(0) 编辑
摘要:空结构体 func main() { a := struct{}{} fmt.Println(unsafe.Sizeof(a)) fmt.Printf("%p\n", &a) } 打印 0 0x117f4e0 有经验的开发人员都知道,所有的空结构体是指向一个 zerobase的地址,而且大小为0 一 阅读全文
posted @ 2023-11-29 21:38 杨阳的技术博客 阅读(249) 评论(0) 推荐(0) 编辑
摘要:定义 在runtime的sync.map包中有定义: type Map struct { mu Mutex // 锁 read atomic.Pointer[readOnly] //包含了readOnly类型的一个struct,下方把 Pointer 也贴了 dirty map[any]*entry 阅读全文
posted @ 2023-11-29 16:25 杨阳的技术博客 阅读(148) 评论(0) 推荐(0) 编辑
摘要:go的map在面试时候经常会被问到。 最近看到群里有个被问到为什么map的每个桶中只装8个元素? map 的结构 注:解决hash冲突还有一些别的方案:开放地址法 (往目标地址后面放)、再哈希法(再次hash) 底层定义 // A header for a Go map. type hmap str 阅读全文
posted @ 2023-11-28 23:09 杨阳的技术博客 阅读(84) 评论(0) 推荐(0) 编辑
摘要:切片的底层数据结构 有上篇string为基础了,能猜到slice肯定也有一个对应的struct。 在runtime的 slice.go中 type slice struct { array unsafe.Pointer len int cap int } 切片的本质是对数组的引用 len 表示当前已 阅读全文
posted @ 2023-11-28 20:28 杨阳的技术博客 阅读(29) 评论(0) 推荐(0) 编辑
摘要:先上一段代码 : func main() { content := "长沙boy" content1 := "boy" fmt.Printf("content: %d\n", unsafe.Sizeof(content)) fmt.Printf("content1: %d\n", unsafe.Si 阅读全文
posted @ 2023-11-28 18:11 杨阳的技术博客 阅读(88) 评论(0) 推荐(0) 编辑
摘要:go的启动入口函数 对go有开发经验的朋友都知道,main函数不是真正的启动入口,只是go暴露给用户编写的业务的接口。 这点上基本所有的语言都是类似,在main函数调用前,go需要做一系列的准备工作。 go的启动在 runtime/rto XXX.s, xxx是因为平台的差异。不同系统不同芯片都有自 阅读全文
posted @ 2023-11-28 12:56 杨阳的技术博客 阅读(105) 评论(0) 推荐(0) 编辑
摘要:一、目的 简单看下go编译过程,便于理解go为什么能编译出不同平台都能运行的可执行文件,克服了c和c++需要针对不同平台分开编译的问题。 那些过程能在开发过程中用到,帮助定位问题。 二、整体 编译前端的都好理解,语义分析时候,需要进行go的逃逸分析。 中间码生成 ssa 任意写一个demo: imp 阅读全文
posted @ 2023-11-28 11:12 杨阳的技术博客 阅读(109) 评论(0) 推荐(0) 编辑
摘要:一、需求分析 在和前端对接过程中,需要后端维护一份接口文档,对于这份文档的维护在实际工作中会有一系列的问题,例如参数个数、参数类型、返回类型等。 主要还是后期需要一直维护,如果改了接口,忘记维护文档就会导致前端调用异常。 但是当使用 protobuf定义好了接口,微服务相互间调用,一般不会出现这类问 阅读全文
posted @ 2023-11-27 22:10 杨阳的技术博客 阅读(1224) 评论(0) 推荐(0) 编辑
摘要:总共分为三篇: 1. 分析`go-zero`中 ` coctl rpc` 通过一个` proto`文件生成一系列文件。 2. 模仿这个原理,结合`protoc` 生成代码的特性,把gin的接口定义,也放入proto文件中,自动生成gin的接口代码。 3. 自动生成项目中error错误定义文档。(通过 阅读全文
posted @ 2023-11-27 15:43 杨阳的技术博客 阅读(1129) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示