摘要:        
字符串 type _string struct { elements *byte // 引用着底层的字节 len int // 字符串中的字节数,获取长度O(1) } 对于字符串比较,编译器有两个优化: 若长度不相等,则字符串不相等,O(1) 若指针相等,长度大的字符串大,O(1) slice sl    阅读全文
posted @ 2020-05-27 22:42
是的哟
阅读(818)
评论(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
是的哟
阅读(225)
评论(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
是的哟
阅读(338)
评论(0)
推荐(0)
        
            
        
        
摘要:        
在执行调度循环 runtime.schedule 时,或者系统监控sysmon时,会检查是否有timer就绪。 每次把堆顶timer的when和当前时间作比较,when<nowtime则执行timer里的f,并删除当前timer,如果是ticker,则计算下一次触发的时间,加入到堆中 timer存放    阅读全文
posted @ 2020-05-27 22:35
是的哟
阅读(220)
评论(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
是的哟
阅读(344)
评论(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
是的哟
阅读(217)
评论(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
是的哟
阅读(483)
评论(0)
推荐(0)
        
            
        
        
摘要:        
需要poll的文件描述符都被设置成非阻塞的,加入到epoll里,对应的pollDesc放到epoll event的data域中, 某个goroutine读写fd被阻塞时,runtime会把 fd 对应的 pollDesc 里的 rg / wg 字段设置为这个 g,然后将 g 放到系统的等待队列中 调    阅读全文
posted @ 2020-05-27 22:20
是的哟
阅读(615)
评论(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
是的哟
阅读(656)
评论(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
是的哟
阅读(653)
评论(0)
推荐(0)
        
 
                    
                
 
 浙公网安备 33010602011771号
浙公网安备 33010602011771号