Lec5课程笔记

一、Go协程、匿名函数、闭包

引用外部变量,容易因为go协程运行慢的问题导致变量变化,结果受影响。

二、并发原语condition variable (类似Java中的Condition锁的wait() notify())

// 线程
mu.Lock()
// do something that might affect the condition
cond.Broadcast()
mu.Unlock()

----
// 等待线程
mu.Lock()
while condition == false {
  cond.Wait()
}
// now condition is true, and we have the lock
mu.Unlock()

broadcast 会唤醒通知队列中所有阻塞的线程,而如果用 signal,那就只唤醒通知队列中第一个阻塞进程(即最早阻塞的进程)。signal 使用得好性能更高,但是 broadcast 适用范围更广。

三、不要在RPC调用期间持有锁。

四、Debug

1.封装的DPrintf方法用来打桩
2.ctrl + \,Go 退出信号,退出所有协程并打印 stacktrace,从stacktrace 中就能找到可能出问题的地方。
3.打开 race 检测是否有并发冲突。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值