最近在阅读ants源码时,偶然发现ants有自己研发的自旋锁,之前ants一直用的官方的mutex,后面才改为用自旋锁。 微信公众号原文地址:​​自旋锁设计​​ 根据自旋锁的定义,当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环判断锁是否能够被成功获取,直到获取到锁才会退出循环。那么问题来了,单个协程需要不断循环去检测锁状态,这样看,似乎会有一定的资源浪费。那为什么还需要自旋锁呢? 这就要说到自旋锁的应用场景了,对于很小的原子操作,单个协程不太可能长时间持有锁的情况,比如并发场景下对切片的操作。在这种场景下,使用mutex这种重锁去解决数据竞争问题显然是不可取的,使用自...

  4FTd8CQjh4iJ   2023年11月02日   60   0   0 自旋锁自旋锁

​公众号原文地址:​​如何设计一个好的协程池?​​​​​​ 对于go语言来说,go语言在调度Goroutine已经优化的非常不错了,而且go官方曾说go开上千万个协程没啥大问题。那为什么在协程领域还需要弄一个协程池出来呢? 我们知道,池化思想本质就是复用资源,协程虽然很轻量级,但是如果无休止的开辟Goroutine依然会出现高频率地调度Groutine,就会浪费很多上下文切换的资源。 举个例子,比如游戏要在1000个区开10个活动,就有1w个任务,按照go的实现方式,可以同时开1w个协程去处理。但是我们知道,开一个协程大概需要用到2k左右的内存,1W个任务就是20M左右,同时数万个任务,真...

  4FTd8CQjh4iJ   2023年11月02日   68   0   0 池化go语言池化复用go语言复用
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~