Go问答 关于 go 官方的限流器问题

naiveboy · 2020年06月23日 · 最后由 naiveboy 回复于 2020年06月24日 · 229 次阅读

go 官方的限流器是先获取 time.Now(),然后抢锁进行 token 的判断和桶状态变更,为啥不先抢锁,然后再获取 time.Now(),这样不是更加简单一些吗?

更多原创文章干货分享,请关注公众号
  • 加微信实战群请加微信(注明:实战群):gocnio

time.Now 虽然有优化,但好歹是个 syscall,执行期间可能被抢占,

先获取锁,再被抢占一般都是要尽可能避免:

Authors of parallel programs have known for decades that performance can suffer badly if a thread is preempted while holding a lock; this is sometimes referred to as inopportune preemption.

你看引用一段英文就更有说服力了 [doge]

cch123 回复

就是说希望能降低临界区的执行时长是吧,如果在临界区内部系统调用会降低系统的性能对吧

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册