保存成功
订阅成功
保存失败,请重试
提交成功
林斌

林斌

技术经理
上市公司研发经理,擅长并发及多线程编程。...更多
创作文章11
开设专栏1

深入理解 Java 内存模型与应用

Java 是一个支持并发的语言,然而编写一个正确且符合直觉的并发程序并不是一个容易的事情。在多线程执行的情况下,编译器动态优化,CPU 乱序执行,多层级内存架构都会导致程序出现一些不可预料,无法解释的表现行为。为了降低开发者的难度,Java 语言制定了 Java 内存模型来指导开发者进行并发程序编写,为开发者对程序结果进行预测提供了可执行的规则。 JMM 最为人熟知的就是 HB 关系,然而这并不是 JMM 的全部。JMM 并不是一个很好理解的规范,官网上的解释采用了大量的数学定义来表达。本场 Chat 将从规范解释和实例讲解的角度,深入的解读 JMM 模型。 本场 Chat 包含约 1.6 万字,会涉及到如下内容: - 什么是重排序,重排序会导致什么样的结果 - 什么是线程内语义一致性,什么是正确同步 - JMM 定义的程序排序,同步排序,先发生于(HB)排序是怎么样的定义 - JMM 规范的因果性判定该如何理解与使用。 - 如果利用 HB 关系来实现安全发布 适合人群:需要编写并发编程的开发者;需要掌握和理解 JMM 的开发者
Java
122 订阅

心跳与超时:高并发高性能的时间轮超时器

在许多业务场景中,我们都会碰到延迟任务,定时任务这种需求。特别的,在网络连接的场景中,常常会出现一些超时控制。由于服务端的连接数量很大,这些超时任务的数量往往也是很庞大的。实现对大量任务的超时管理并不是一个容易的事情。 在本篇Chat中,我们会分析实现延迟任务的几种常见算法和数据结构。并且引入介绍一种更高性能的支撑延迟任务场景的数据结构:时间轮。并且最后以 Netty 中的代码实现进行分析,完成从利润到代码的落地。
免费高并发
33 订阅

支持优先级内部晋升的无锁并发优先级线程池

在业务中存在着这样的一种场景,任务自身有着优先级区分。高优先级的任务要先于低优先级的任务执行。但是如果一直持续不断的有高优先级任务添加到队列,可能会导致低优先级任务无法分配执行资源而被饿死。 因此除了优先级控制外,已经入队到优先级线程池中的低优先级任务需要有一种机制可以实现优先级的晋升。这样才能避免在线程池中的低优先级任务被饿死。 本场 Chat 会从整个线程池的设计思路,并发过程,数据结构的推导开始分析,从 0 到 1 论证整个线程池的构成。 在本场 Chat 中,会讲到如下内容: + 什么样的数据结构可以高性能的完成优先级晋升这个任务。 + 内部任务的优先级晋升如保证不会被外部持续加入的高优先级任务饿死。 + 任务提取,任务放入,任务优先级变更,如何保证并发安全
免费
50 订阅

最终一致性:BASE 论文笔记

现在的系统很多时候都采用了分布式的架构。这种架构之下,各个服务之间管理着自身独立的数据。一个完整的业务往往跨越多个服务。在传统单机应用时代,数据的一致性可以依靠数据库事务保证。但是在分布式下,数据的一致性问题却变得麻烦起来。本文通过对 BASE 论文的解读,来阐述其提到的通过最终一致性的方案思路来处理分布式下数据一致性问题。
免费系统设计
166 订阅

Activiti 架构分析及源码详解

工作流引擎,应用于解决流程审批和流程编排方面等问题,有效的提供了扩展性的支撑。而目前来说,工作流领域也有了相对通行化的标准规范,也就是 BPMN2.0。支持这个规范的开源引擎主要有:Activiti,flowable,Jbpm4 等。本文着重对 Activiti 的架构设计进行分析和梳理,同时对流程启动和原子操作的相关代码进行完整走读。 本文的阅读对象需要对 Activiti 有一定的理解并且已经能够初步的使用 Activiti 进行流程流转方面开发。
免费系统设计
161 订阅

从 2-3-4 树模型到红黑树实现

红黑树,是一个高效的二叉查找树。其定义特性保证了树的路径长度在黑色节点上完美平衡,使得其查找效率接近于完美平衡的二叉树。 但是红黑树的实现逻辑很复杂,各种旋转,颜色变化,直接针对其分析,大多数都是死记硬背各种例子,不太容易有个直观的理解。实际上,红黑树是实现手段,是其他概念模型为了方便在二叉树上实现进而定义的节点颜色这个信息。如果从概念模型入手,再一一对应,就容易理解的多了。而红黑树能够对应的模型有 2-3 树,2-3-4 树等,下面我们会以 2-3-4 树作为概念模型,对红黑树进行分析。
免费算法
127 订阅

REST 架构指导方案

本 Chat 从 REST 架构的诞生地,《Architectural Styles and the Design of Network-based Software Architectures》论文为出发点,阐述了 REST 起源和思想。并且通过最佳实践的方式分享了如何在系统架构中应用 REST。
免费计算机网络
223 订阅

ConCurrentHashmap 详细分析

`HashMap` 是在应用开发中常见的数据结构。但是其应用的要求是在单线程之中,不支持并发。在并发场景之下,为了应对高并发,读写可见等需求,JDK 为我们提供了并发安全的 `ConCurrentHashMap` 容器。`ConCurrenthashmap` 是一个并发无锁算法的容器结构,其设计和实现比起 `HashMap` 复杂了许多,本文将带读者深入分析该数据结构背后的设计思路,并且针对主要方法,逐行解析其代码设计上的精妙之处。特别是其对并发无锁算法的设计,读写操作之间的数据可见性原理,做深入的解析。 通过这篇 Chat,您将获得: + `ConCurrenthashMap` 如何设计数据结构支撑无锁情况下的并发读写。 + 读写操作之间的可见性是如何保证的。 + `ConCurrenthashMap` 如何实现无锁的并发写入。 + `ConCurrenthashMap` 如何实现并发的读写,如何确保读取操作一定能读取到正确的写入值。 + `ConCurrenthashMap` 如何实现高效率的多线程协助扩容。
免费ConcurrentHashMap
586 订阅

警惕无形性能杀手:缓存行失效

在我们的程序中,有一类埋藏极深的问题,其可能导致我们的程序性能数量级的下降,它就是缓存行失效。它是因为 CPU 的结构设计而导致的,与语言无关。本篇 Chat 会以例子的形式介绍问题的表现,介绍相关的背景知识,分析问题的根本,并且给出解决方案。 在本场 Chat 中,你将了解到以下知识: 1. 缓存行失效时导致的性能问题现象 2. 何为 CPU 缓存,又何为缓存一致性协议 3. 缓存行失效是如何导致性能问题 4. 使用什么手段可以处理规避缓存行失效
Java性能优化
124 订阅

Netty 如何实现内存泄露的追踪审计

Netty 中使用内存池化技术有效的提升了程序的整体性能。但是由于回归了手动申请内存和释放的方式,在粗心或者遗忘的情况下,开发者往往会忘记释放申请得到的内存而造成内存泄露。而在复杂的程序中寻找泄露的内存对象也往往不容易。为此 Netty 提供了针对资源对象的追踪审计功能,帮助开发者发现潜在的内存泄露问题。 在本场 Chat 中,会讲到如下内容: 1. Netty 如何监控资源对象的可能泄露 2. Netty 中对泄露追踪的代码实现解读 适合人员:对 Netty 内部实现细节感兴趣的同学 本文已参加 GitChat「我的技术实践」有奖征文活动,活动链接:[ GitChat「我的技术实践」有奖征文活动](https://gitbook.cn/gitchat/activity/5d5e3d9d877aaf2
免费
107 订阅

从源码学习 Netty(1):Netty 的模块组成&线程模型

Netty 可以说作为中高级工程师,基本都会在项目当中使用过。其对开发者友好的编程模型使得其成为事实上的 Java 领域网络 IO 框架标准。不过其使用虽然容易,但是想深入其设计和细节却有点困难,社区上也未能提供有效的资料。因此笔者根据日常的使用和源码上的研究,整理了一份深入其设计细节的 Netty 源码分析。 本场 Chat 将会分析到如下内容: 1. Netty 的模块组成分析 2. Netty 的线程模型如何设计和演进 3. 支撑 Netty 的线程模型的类及其背后的源码设计 适合人群:已经明白 Netty 如何使用,但是想深入掌握 Netty 的设计思想和源码细节的开发同学。 本文已参加 GitChat「我的技术实践」有奖征文活动,活动链接:[ GitChat「我的技术实践」有奖征文活动](https://gitbook.cn/gitchat/activity/5d5e3d9d877aaf2c49e5c87e)
151 订阅
微信扫描登录