Ostep 29 Lock Based ConcurConcurrency Data Structure

这章比较简单简短,主要介绍了并发数据结构的实现。

总结下的话,实现并发的数据结构,我们需要考虑主要2个点:

  1. 正确性。这个毋庸置疑,并发情况操作下,要保证数据的正确性。
  2. 性能。并发数据结构的性能其实分两部分
  3. 在实现正确性的情况下,结构本身的性能
  4. 在线程越来越多(并发越来越高)的情况下,性能下降的程度

从这些点来考虑的话,我们直接总结下这章说道的并发数据结构的实现方式:

  1. 直接所有操作加锁,缺点就是性能最差,适用于所有数据结构。
  2. 降低锁的规模,比如队列只对头尾节点加锁,哈希表只对对应的桶加锁。

这章提到了一个实现或者说概念,接近计数器Approximate Counters

接近计数器主要由以下几部分组成:

  1. 维护一个跟CPU相关的计数counter,thread counter。比如使用一个数组,然后通过当前线程id%cpu总数来得到对应的
  2. 全局维护的一个计数counter,global counter。
  3. 一个阈值threshold。

当使用时,每个线程获取自己thread counter的锁进行操作thread counter(避免了全局锁,获取自己的锁的原因是单cpu上也可能线程切换)。

当thread counter的值达到threshold阈值以后,尝试获取global coutner的锁,将thread counter的值加到global counter上去。

我们会发现,因为threshold的存在,global counter的值总是一个接近真实值的较小值,它与准确度大小与threshold有关,同时,这个计数器的性能也与threshold有关,这两者成反比,越准确,性能越差。反之亦然。

版权声明:除特殊说明,博客文章均为intotw原创,依据CC BY-SA 4.0许可证进行授权,转载请附上出处链接及本声明。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇