2016 - 2024

感恩一路有你

内存池的实现原理 无锁的线程池,和内存池,还有无锁的队列的设计思路是什么呢?

浏览量:1853 时间:2021-03-17 13:22:19 作者:admin

无锁的线程池,和内存池,还有无锁的队列的设计思路是什么呢?

今天的无锁设计得益于CPU对CAS操作的支持。因此,如果您想了解无锁设计,您应该首先了解什么是CAS。

CAS是compare and swap的缩写,中文翻译为“compare and exchange”。它的实现如下:有三个操作数,内存值V、旧的期望值a和要修改的新值B。当且仅当期望值与内存值相同时,将内存值V更改为B,否则将不执行任何操作。

下面是一个解释CAS算法的示例。假设有两个线程T1和T2同时访问同一变量10。因此,他们会将主内存的值复制到自己的工作内存空间中,因此T1和T2线程的预期值是10。

假设T1和T2竞争时,T1成功地将变量值更改为11,然后将其写入内存。当T2执行更新时,发现内存值已更改为11,这与预期值10不一致。也就是说,更新失败,然后重新执行前面的操作。

CAS操作类似于提交重试模式。当同步冲突发生的几率较小时,系统的性能会有很大的提高。

虽然CAS有效地解决了原子操作问题,但仍然存在三个问题:ABA问题、spin-CAS循环时间长、开销大、一个CAS只能保证一个变量的原子操作。针对这三个问题,不同的语言给出了解决方案。如果您想了解更多,可以查询您关注的解决方案。

由于缺乏硬件知识,如果您想知道CPU是如何实现的,可以查看CPU的相关信息。

内存池的实现原理 unorderedmap底层实现 存储池的概念

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。