IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:CAS

共 4 篇相关文章

IT 累计浏览 3,091

【死磕Java并发】—–J.U.C之Java并发容器:ConcurrentLinkedQueue

这篇技术解析深入探讨了Java并发包中非阻塞线程安全队列ConcurrentLinkedQueue的实现原理。文章从线程安全队列的两种实现思路(阻塞与非阻塞)切入,重点剖析了ConcurrentLinkedQueue如何完全基于CAS算法(无锁)来实现其核心操作。 作者详细拆解了该队列必须遵循的四个关键不变性,并阐明了head与tail指针在更新时可以“滞后”的设计特性。全文的核心在于通过逐行解读offer()入列与poll()出列方法的源码,并辅以清晰的步骤图,生动展示了在多线程竞争环境下,新节点是如何被安全添加、以及头部节点如何被识别并移除的。分析中特别指出,像“p == q”这种看似异常的判断,正是处理并发删除与插入操作交错进行的关键所在,巧妙地解决了指针可能因并发更新而失效的难题。 通过这篇文章,读者能直观理解一种高性能并发容器如何在不使用锁的情况下,通过精巧的指针操作和CAS原子指令来保障线程安全与最终一致性。

IT 累计浏览 12,095

一种高效无锁内存队列的实现

这篇讲的是LMAX公司开源的高性能内存队列Disruptor的实现原理。作者从设计文档和实践博客出发,梳理了这个被称作“最快队列”的核心设计思想。 Disruptor要解决的是高并发场景下传统队列带来的锁竞争、伪共享和频繁垃圾回收问题。它的核心方案围绕一个环形缓冲区展开,通过预分配固定大小的数组作为存储,避免了动态内存分配的开销。最关键的是,整个读写操作都通过CAS指令实现无锁化,用序列号代替锁来协调多生产者与多消费者。 文章分析了其巧妙之处:利用缓存行填充消除伪共享,采用双缓冲思想优化写入,并允许消费者独立消费,这些设计共同实现了极低的延迟和极高的吞吐量。作者在总结中对比了它与传统并发队列的适用场景,指出Disruptor更适合对延迟敏感、数据处理量巨大的系统核心链路。

IT 累计浏览 2,014

Lua State 间的数据共享

在多程序员协作的Lua项目中,数据共享常成为性能瓶颈。这篇讲的是如何在Lua State之间实现高效数据共享,以解决团队开发时需要在不改动接口的前提下提升性能和扩展功能的现实需求。作者从实际项目出发,面对10名开发者并行工作的情况,发现传统状态隔离方式导致数据同步开销大,影响了迭代效率。 文章核心方案是设计一种轻量级共享架构,利用Lua的表引用和弱引用机制,允许不同State通过共享内存区域直接访问数据,避免频繁复制。实现中巧妙结合了元表代理和垃圾回收策略,减少了竞争条件和内存泄漏风险。作者提供了具体优化细节,比如在查询密集操作中性能提升达25%,同时确保了系统稳定性。这种架构不仅加速了现有功能的改进,还为未来模块扩展预留了灵活接口,让项目能更从容地应对复杂需求变化。

IT 累计浏览 5,181

Apache + Jetty 架设 CAS 单点登录

作者从实际部署需求出发,挑战了常规的 CAS 单点登录部署方案。通常教程推荐直接使用 Tomcat 或 Jetty 绑定 443 端口并配置 SSL,但他更倾向于将 SSL 终止这一职责交给 Apache 处理,让 Jetty 专注于应用逻辑。 这篇笔记详细记录了实现这一架构的具体实践。核心在于配置 Apache 作为前端,负责处理 HTTPS 请求,然后通过反向代理(如 AJP 或 mod_jk)将请求安全地转发给后端的 Jetty 服务器。文章梳理了在此过程中遇到的关键配置点与调整细节,为读者提供了一条可行的替代路径。 这种架构将 Web 服务器与应用服务器职责分离,有利于统一管理 SSL 证书与安全策略,也使得后端应用部署更为灵活。对于希望在保持生产环境安全合规的同时,又不想被应用服务器的端口绑定所束缚的运维与开发人员来说,这个方案提供了值得参考的思路。