摘要: 字符串 type _string struct { elements *byte // 引用着底层的字节 len int // 字符串中的字节数,获取长度O(1) } 对于字符串比较,编译器有两个优化: 若长度不相等,则字符串不相等,O(1) 若指针相等,长度大的字符串大,O(1) slice sl 阅读全文
posted @ 2020-05-27 22:42 是的哟 阅读(781) 评论(0) 推荐(0) 编辑
摘要: go newproc new newobject make makeslice,makechan,makemap,makemap_small...... <- chansend1,chanrecv1,chanrecv2 close closechan select selectgo make、new 阅读全文
posted @ 2020-05-27 22:38 是的哟 阅读(219) 评论(0) 推荐(0) 编辑
摘要: futex futex(&f, FUTEX_WAIT, val, t, nil, 0) 选项FUTEX_WAIT,表示使用mmap在内核态和用户态之间共享f的内存,测试f的值如果等于val则休眠时间t futex(&f, FUTEX_WAKE, cnt, nil, nil, 0) 选项FUTEX_W 阅读全文
posted @ 2020-05-27 22:37 是的哟 阅读(324) 评论(0) 推荐(0) 编辑
摘要: 在执行调度循环 runtime.schedule 时,或者系统监控sysmon时,会检查是否有timer就绪。 每次把堆顶timer的when和当前时间作比较,when<nowtime则执行timer里的f,并删除当前timer,如果是ticker,则计算下一次触发的时间,加入到堆中 timer存放 阅读全文
posted @ 2020-05-27 22:35 是的哟 阅读(209) 评论(0) 推荐(0) 编辑
摘要: sync.Cond type Cond struct { L Locker notify notifyList } func NewCond(l Locker) *Cond { return &Cond{L: l} } func (c *Cond) Wait() { t := runtime_not 阅读全文
posted @ 2020-05-27 22:34 是的哟 阅读(319) 评论(0) 推荐(0) 编辑
摘要: 接口 type Context interface { Deadline() (deadline time.Time, ok bool) //若实现了超时控制,该方法返回超时时间,true。否则ok为false Done() <-chan struct{} // 通过关闭channel进行通知 Er 阅读全文
posted @ 2020-05-27 22:30 是的哟 阅读(201) 评论(0) 推荐(0) 编辑
摘要: var x, y int go func() { x = 1 fmt.Print("y:", y, " ") }() go func() { y = 1 fmt.Print("x:", x, " ") }() 结果可能为 y:0 x:0 , 编译器看到打印和赋值的变量不同,认为交换两条语句不会影响结 阅读全文
posted @ 2020-05-27 22:24 是的哟 阅读(452) 评论(0) 推荐(0) 编辑
摘要: 需要poll的文件描述符都被设置成非阻塞的,加入到epoll里,对应的pollDesc放到epoll event的data域中, 某个goroutine读写fd被阻塞时,runtime会把 fd 对应的 pollDesc 里的 rg / wg 字段设置为这个 g,然后将 g 放到系统的等待队列中 调 阅读全文
posted @ 2020-05-27 22:20 是的哟 阅读(591) 评论(0) 推荐(0) 编辑
摘要: CALL runtime·args(SB) // 整理命令行参数 CALL runtime·osinit(SB) // 确定cpu核心数 CALL runtime·schedinit(SB) // 初始化核心组件 CALL runtime·newproc(SB) // 创建主goroutine即ru 阅读全文
posted @ 2020-05-27 22:19 是的哟 阅读(592) 评论(0) 推荐(0) 编辑
摘要: 启动m,进入调度循环 gosave初始化g0.sched执行现场,acquirep绑定p,schedule调度 mstart -> mstart1 -> save -> acquirep -> schedule -> mexit 休眠m gc时,或找不到g的m,或者因执行时间过长、系统调用阻塞等原因 阅读全文
posted @ 2020-05-27 22:17 是的哟 阅读(614) 评论(0) 推荐(0) 编辑