
go
文章平均质量分 57
冯伟ft
这个作者很懒,什么都没留下…
展开
-
2021-03-31 go语言的goroutine调度
go语言的调度设计到几个重要是数据结构,结构体g,结构体m,结构体p以及sched结构体,结构体G struct G{ uintptr stackguard; // 分段栈的可用空间下界 uintptr stackbase; // 分段栈的栈基址 Gobuf sched; //进程切换时,利用sched域来保存上下文 uintptr stack0; FuncVal* fnstart; ...原创 2021-04-06 09:16:49 · 167 阅读 · 0 评论 -
2021-03-31 go语言初始化过程
go在执行main包中的main函数之前肯定是需要做一些准备工作的,这些工作包括:设置好本地线程存储,设置好main函数的参数,设置线程的数量,初始化调度器和内存的管理等。 sysmon后台任务,主要处理两个时间:对于网络的epoll以及抢占式调度的检测;它是由newm函数创建一个新的物理线程运行sysmon函数,所以他的优先级是非常高的,整个函数是一个死循环。sysmon会根据系统的繁忙程度睡眠一段时间,然后每10ms进行一次epoll并唤醒相应的goroutine。同时会检测是否有p长时间处于psys原创 2021-03-31 08:59:38 · 206 阅读 · 0 评论 -
2021-03-29 go语言map理解
Go中的map在底层是用哈希表实现的,你可以在 $GOROOT/src/pkg/runtime/hashmap.goc 找到它的实现。 struct Hmap{ uint8 B; // 可以容纳2^B个项 uint16 bucketsize; // 每个桶的大小 byte *buckets; // 2^B个Buckets的数组 byte *oldbuckets; // 前一个buckets,只有当正在扩容时才不为空};..原创 2021-03-30 11:01:24 · 205 阅读 · 0 评论 -
2021-03-29 go语言笔记(深入了解go-基本数据结构)
类型之间相互转化:在go语言中基本类型之间的相互转化只有显式转换,不想java有显式转化和隐式两种,即不能将一个int类型直接赋值给一个浮点型,就算式int32也不能赋值给int64,所有的转化都是需要显式语法说明的。结构体的域在内存中是紧挨着排列的。如type Rect1 struct { Min, Max Point } type Rect2 struct { Min, Max *Point }也就说如果创建一个Rect1 结构类型的对象,对象中min 和 max在内存中会存放在相邻的空间..原创 2021-03-29 22:40:14 · 148 阅读 · 0 评论