首页
AI Coding
数据标注
NEW
沸点
课程
直播
活动
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
登录
注册
赛跑
掘友等级
获得徽章 0
动态
文章
专栏
沸点
收藏集
关注
作品
赞
0
文章 0
沸点 0
赞
0
返回
|
搜索文章
最新
热门
GO:从进程启动到调度
开篇 以下的内容刨除了包括 GC 、mallco、netpoll、timers 等等其他部分的相关逻辑,很多细节略过,并且只关乎调度。 进程启动 go 进程启动,执行的是 main 包中的 main
go 反射
go 反射源码 关于 reflect.Type reflect.Value 的源码分析 介绍一些常用的反射函数
一步一步设计 go sync.mutex
首先我们知道 go 有 park 方法可以阻塞 g ,有调度方法可以重新调度 g ,所以我们可以用这两个方法来做 g 的加锁和解锁。其次,我们怎么知道什么时候该阻塞 g,也就是说,我们怎么知道发生了竞争,这里我们用状态 state 来标识是否发生了竞争。 既然有了状态,我们先定…
我所理解的 http.server 和 netpoll
go 的 http.server 主要逻辑:net.listen 会创建一个 TCPListener 去监听一个端口,listener.Accept 生成 Conn 链接,然后启动 goroutine 执行 conn.serve 函数。这里面有几个关键的问题 解决了上面的几个问…
defer-panic-recover 浅谈
对于 defer 来说,编译器会把 defer 关键字转换成 deferproc 函数和 deferreturn 函数,deferproc 和 deferreturn 是成对出现的,只不过 deferproc 出现在 defer 关键字出现的地方,deferreturn 则会被…
sync.mutex 源码分析
sync.mutex 是 goroutine 粒度的互斥锁, 关于 goroutine 相关的挂起和唤醒是调用 sema.go 中的方法来实现的,而sema.go 中关于 m 的加锁和唤醒则是在 lock_sema 中实现的。 g 首先会 cas 抢锁,抢到就直接返回,相当于进…
go sema 源码分析
大致流程:获取 sudog 和 semaRoot ,其中 sudog 是 g 放在等待队列里的包装对象,sudog 里会有 g 的信息和一些其他的参数, semaRoot 则是队列结构体,内部是堆树,把和当前 g 关联的 sudog 放到 semaRoot 里,然后把 g 的状…
golang lock_sema 源码分析
先从寄存器或者 TLS 里获取当前 g,继而获取 m,cas 抢占锁,cas 成功,说明抢到锁,直接返回。 每个 m 都有自己的 pthread_mutex 和 pthread_cond ,用来给自己加锁解锁等待和唤醒。 上面五次操作进行完,还是没有获取到锁,就会加入队列,并且…
个人成就
文章被点赞
1
文章被阅读
8,703
掘力值
195
关注了
0
关注者
2
收藏集
0
关注标签
4
加入于
2019-12-23