ICode9

精准搜索请尝试: 精确搜索
  • 并发无锁队列学习(概念介绍)2022-03-21 17:58:59

    1、前言   队列在计算机中非常重要的一种数据结构,尤其在操作系统中。队列典型的特征是先进先出(FIFO),符合流水线业务流程。在进程间通信、网络通信之间经常采用队列做缓存,缓解数据处理压力。结合自己在工作中遇到的队列问题,总结一下对不同场景下的队列实现。根据操作队列的场景

  • Synchronized详解-》 无锁、偏向锁、轻量级锁、重量级锁2022-02-22 01:03:31

    问: 什么是偏向锁,偏向锁加锁流程是什么?? 答: makeword : 64位二进制位 偏向锁:64位二进制位中:其中 1、 表示偏向线程id的bit位都是0 & 2、锁状态位: 表示偏向锁状态 这个时候线程直接在锁对象markword的高位内存储当前线程的内存地址 步骤:  1 还要向当前的线程栈添加一条锁记录

  • Java并发编程之cas理论(无锁并发)2022-02-20 23:04:52

    文章目录 1、共享模型之无锁2、有锁无锁模式对比3、 CAS 与 volatile3.1、cas + 重试 的原理3.2、volatile的作用3.3、为什么CAS+重试(无锁)效率高3.4、CAS 的特点 (乐观锁和悲观锁的特点) 4、原子整数 (内部通过CAS来实现-AtomicInteger)5、原子引用 (AtomicReference)5.1

  • disruptor无锁队列实现流水记录2022-01-28 13:06:20

    目录 1 无锁机制简介 2 RingBuffer简介 2.1 工作原理简介 3 disruptor实现流水异步入库 3.1 定义事件实体类 3.2 定义事件服务类 3.3 定义消费者 3.3.1 单任务处理 3.3.2 批处理 3.4 运行 4 pom依赖 5 参考 1 无锁机制简介 普通队列写入时需要通过锁机制避免并发,disruptor不用

  • 性能优化-使用双buffer实现无锁队列2022-01-17 07:31:21

    借助本文,实现一种在“读多写一”场景下的无锁实现方式 在我们的工作中,多线程编程是一件太稀松平常的事。在多线程环境下操作一个变量或者一块缓存,如果不对其操作加以限制,轻则变量值或者缓存内容不符合预期,重则会产生异常,导致进程崩溃。为了解决这个问题,操作系统提供了锁、信号量

  • 双buffer实现无锁切换2022-01-06 23:33:52

    大家好,我是雨乐! 在我们的工作中,多线程编程是一件太稀松平常的事。在多线程环境下操作一个变量或者一块缓存,如果不对其操作加以限制,轻则变量值或者缓存内容不符合预期,重则会产生异常,导致进程崩溃。为了解决这个问题,操作系统提供了锁、信号量以及条件变量等几种线程同步机制供我们使

  • 无锁队列真的比有锁队列快吗【c++ linux后台开发】2021-12-22 14:32:10

    无锁队列真的比有锁队列快吗【c++ linux后台开发】|解决内存频繁分配问题|无锁队列没数据可读时怎么休眠|无锁队列到底是不是终极解决方案 专注后台服务器开发,包括C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等 学习地址:C/C++Linu

  • 29 | 无锁的原子操作:Redis如何应对并发访问?2021-12-20 11:33:50

    Redis核心技术与实战 实践篇 29 | 无锁的原子操作:Redis如何应对并发访问? 为了保证并发访问的正确性,Redis 提供了两种方法,分别是加锁和原子操作。 加锁是一种常用的方法,在读取数据前,客户端需要先获得锁,否则就无法进行操作。当一个客户端获得锁后,就会一直持有这把锁,直到客户端

  • c/c++ linux后台开发 3.2.2无锁队列2021-12-19 13:35:09

    无锁队列使用场景 至少每秒十几万读写才考虑使用,否则没有意义 循环数组无锁队列实现 这个队列结构简单,有大小上限,可以适用于多写多读的情况 接口 bool enqueue(const ELEM_T &a_data); // ⼊队列 bool dequeue(ELEM_T &a_data); // 出队列 bool try_dequeue(ELEM_T &a_data

  • 高性能无锁队列 Mpsc Queue2021-11-16 23:02:54

    JDK 原生并发队列 JDK 并发队列按照实现方式可以分为阻塞队列和非阻塞队列两种类型,阻塞队列是基于锁实现的,非阻塞队列是基于 CAS 操作实现的。JDK 中包含多种阻塞和非阻塞的队列实现,如下图所示。 队列是一种 FIFO(先进先出)的数据结构,JDK 中定义了 java.util.Queue 的队列接口,与 Li

  • 【编程技巧】无锁并发之原子操作CAS2021-11-04 18:34:15

    目录前言 前言 李柱明博客:https://www.cnblogs.com/lizhuming/p/15486895.html 一、什么是原子操作 不可被中断的一个或者一系列操作、 CAS 是 Compare And Set 的缩写,是以一种 无锁的方式实现并发控制 。在实际情况下,同时操作同一个对象的概率非常小,所以多数加锁操作做的是无用功

  • sychronized 锁升级2021-10-26 12:04:24

    sychronize有几种锁 sychronize 1.6之前,只存在重量级锁,也就是一个线程拿到锁之后,其他没有拿到锁的线程只能阻塞。 1.6之后,新加了偏向锁和轻量级锁(自旋锁)。 无锁 无锁是指没有对资源进行锁定,所有的线程都能访问并修改同一个资源,但同时只有一个线程能修改成功。 也就是说,理想情况

  • 浅谈:无锁并发框架Disruptor2021-10-19 22:00:40

     介绍:        Disruptor是一个开源框架,研发的初衷是为了解决高并发下列队锁的问题,最早由LMAX(一种新型零售金融交易平台)提出并使用,能够在无锁的情况下实现队列的并发操作,并号称能够在一个线程里每秒处理6百万笔订单(这个真假就不清楚了!牛皮谁都会吹)。 框架最经典也是最

  • 无锁CAS_无所队列2021-10-09 22:01:55

    什么是CAS? ⽐较并交换(compare and swap, CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据 交换操作,从⽽避免多线程同时改写某⼀数据时由于执⾏顺序不确定性以及中断的不可预知性产⽣的数据 不⼀致问题。 该操作通过将内存中的值与指定数据进⾏⽐较,当数值⼀样时将

  • [翻译转载] 风险指针: 无锁对象的安全内存回收机制2021-10-01 13:34:12

    本文翻译文章 Hazard Pointers: Safe Memory Reclamation for Lock-Free Objects 风险指针: 无锁对象的安全内存回收机制 摘要: 无锁对象提供了比传统有锁对象更高的性能和可靠性. 然而, 仍缺少一种高效可移植的回收动态节点内存的方法, 阻碍了无锁对象被更广泛的在实践中使用. 这

  • 无锁编程2021-09-02 19:01:59

    无锁编程背景 什么是无锁编程 无锁编程原理 无锁编程所使用的场景 无锁编程实现 无锁与有锁的区别和优缺点

  • 消息队列与无锁队列实现2021-08-15 13:01:43

    1 解决问题 消息队列在服务器中的位置,一般用于生产消费者模式的,分类两种情况一种非线程安全的,一种在多线程下使用的。例如 线程池中处理任务队列,任务队列就是消息队列。如下图 当多个线程同时操作一个任务队列或者消息队列或同一临界资源的时候,就可能会遇到线程切换的问题。

  • CAS 无锁队列2021-08-03 17:30:09

    cas实现 https://www.cnblogs.com/shines77/p/4209871.html 实现2 无锁队列 https://blog.csdn.net/yand789/article/details/27545135

  • C++11 CAS无锁函数compare_exchange_weak的使用2021-08-03 12:04:02

      #include <iostream> // std::cout #include <atomic> // std::atomic #include <thread> // std::thread #include <vector> // std::vector // a simple global linked list: struct Node { int value; Node* ne

  • 无锁队列2021-07-11 14:03:41

    单生产者   初始位置:生产者的头和尾指向相同的位置;并只有生产者的头和尾被修改   1.生产者的头和消费者的尾指向临时变量,prond_next指向表的下一位置,如果没有足够的空间,返回错误   2.prod_head(原变量而非临时变量)指向prod_next,新元素入队   3.修改prod_tail指向prod_hea

  • 第二部分:并发工具类21->原子类:无锁工具2021-07-07 15:32:11

    1.原子类 可见性问题,可以通过volatile解决 原子性问题,可以采用互斥锁方案 2.无锁方案 public class Test { AtomicLong count = new AtomicLong(0); void add10K() { int idx = 0; while(idx++ < 10000) { count.getAndIncrement(); } } } count

  • 多版本并发控制MVCC和乐观锁OCC 是什么 区别2021-06-17 11:58:30

    多版本并发控制(MVCC, Multi-Version Concurrency Control): 解决读写冲突的无锁并发控制   乐观锁(occ,Optimistic Concurrency Control): 解决写写冲突的无锁并发控制   https://www.cnblogs.com/lijiale/p/12752760.html   并发控制 在数据库中,并发控制是

  • 解决并发问题的方法(有锁、无锁)2021-06-08 16:37:06

    1 并发问题解决的方式 无锁 局部变量 不可变对象 ThreadLocal 有锁 synchronized ReetrantLock 1.1 无锁的解决方式 1.1.1 局部变量 善用局部变量可以避免出现线程安全问题。 当每一个线程都运行同一行代码时,如果只是操作局部变量,则不可能会造成并发问题。因为每个线程操

  • 无锁队列MpscQueue源码分析2021-06-04 09:03:43

    前言 之前的文章在分析NioEventLoop源码的时候,有提到过Netty没有用JDK提供的阻塞队列,而是使用了高性能无锁队列MpscQueue。因为篇幅原因,那篇文章并没有详细介绍MpscQueue,今天,它来啦!!! ​ 在Netty较早的版本中,使用的是自己实现的任务队列,后来全部替换为JCTools工具的无锁化队列

  • 【crossbeam系列】2 crossbeam-epoch:基于epoch的无锁“垃圾收集”2021-05-09 09:54:06

    上次我们试图实现一个无锁的并发栈,但是发现由于Rust没有GC,简单的实现会导致内存泄漏。于是crossbeam提供了一个基于epoch的“垃圾收集”(epoch based reclamation)库。首先来简单的说一下这一垃圾回收的原理。基于epoch的“垃圾回收”这一算法主要在Keir Fraser的博士论文中有涉及

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有