7 dm_vincent

尚未进行身份认证

暂无相关描述

等级
博文 202
排名 1k+

[Java 并发基础] 也来聊聊Java多线程中的一些概念问题

文章导航什么是多线程并发为什么要进行多线程并发编程线程安全Java内存模型映射到现代硬件架构内存可见性问题的解决方案synchronizedvolatile原子性和线程安全,锁和内存可见性什么是多线程并发理清并发和并行的概念。并发:同一个时间段内多个任务同时都在执行,并且都没有执行结束。并行:在单位时间内多个任务同时在执行。并发任务强调在一个时间段内同时执行,而一个时间段是由多个单位时间...

2019-07-13 20:43:12

JDK 8 函数式编程最佳实践

文章导航JDK8函数式编程最佳实践1.Lambda表达式的重要接口1.1新增的函数接口1.1无参数,无返回值类型接口1.2无参数,有返回值类型接口1.3有参数,也有返回值的类型接口2.方法引用2.1静态方法引用2.2实例方法引用2.3构造方法引用3.使用Lambda表达式完成集合的规约操作3.1成为一个单值类型3.2成为一个集合类型3.3stream和parallel...

2019-07-12 21:05:12

[分布式事务-TCC] 6. TCC的优化方案之三:二阶段异步化

二阶段异步化采用TCC模型实现分布式事务之后,分布式事务所需的资源也是按照业务的维护进行切分,每笔分布式事务之间的资源都是独立预留和消费。单说这些可能有点难理解举个栗子就很容易理解了,账户A同时参与了两笔分布式事务,一笔是转账50元到账户B;另一笔是转账100元到账户C。那么每笔分布式事务都会各自预留所需的资源,它们感知不到彼此的存在,也不会互相干扰。这里顺便复习一下实现TCC模型的一个关键...

2019-07-07 22:21:48

[分布式事务-TCC] 5. TCC的优化方案之二:同库优化

同库优化在上一篇文章中,介绍了最末参与者优化(LPO),它能够减少网络调用的开销。减少网络调用不仅是降低了RT,更重要的是将系统执行的时序复杂度降低了。在对数据一致性有一定要求的高并发场景下,还是能够起到很大的作用。进行最末参与者优化后的时序如下:以减少网络调用次数和每次调用的耗时为切入点,我们来思考一下看看还有没有优化的空间。注意到发起方需要和TC的几次交互如下:分布式事务开始时,...

2019-07-07 22:10:08

[分布式事务-TCC] 4. TCC的优化方案之一:最末参与者优化(LPO)

文章导航优化动机和指导原则最末参与者优化(LPO)优化动机和指导原则当一笔分布式事务的参与者较多时,同时每个参与者都涉及到一阶段和二阶段,还有异常场景下的幂等控制,空回滚以及防资源悬挂处理,调用关系会显著复杂化。特别当业务并发量很大的情况下。比如国内领先的第三方支付场景,并发量在高峰期十分惊人。那么如何尽可能地提高分布式事务的性能就是一个值得深入思考的问题。其实优化的原则也很直观:在能够满...

2019-07-01 23:14:34

[分布式事务-TCC] 3. TCC两个阶段的流程图

TCC两个阶段总结TCC作为分布式事务的一种具有强实时性保证的解决方案,其主要思想在于资源预留。在一切顺利的情况下,一阶段TRY还是很容易理解的。只不过为了保证在各种异常场景下,TCC都能够正常的工作,会添加不少异常处理手段。为了把两个阶段的行为梳理清楚,绘制了下面的流程图作为总结。涉及到的具体细节,可以结合前面的讨论进行回顾。一阶段-TRY二阶段-CONFIRM/CANCEL...

2019-06-26 21:21:46

[分布式事务-TCC] 2. TCC的异常场景及应对机制

文章导航TCC的异常场景幂等处理产生原因应对策略空回滚产生原因应对策略资源悬挂产生原因应对策略三种异常总结幂等空回滚资源悬挂共通点TCC的异常场景在分布式系统中,随时随地都需要面对网络超时,网络重发和服务器宕机等问题。所以分布式事务框架作为搭载在分布式系统之上的一个框架型应用也绕不开这些问题。具体而言,有以下常见问题:幂等处理空回滚资源悬挂这些异常的应对需要TCC框架的支持和解决方...

2019-06-16 21:40:33

[分布式事务-TCC] 1. 分布式事务的由来和TCC的核心思想和工作流程

文章导航分布式事务的由来和TCC的核心思想和工作流程写在前面引子TCC是什么TCC的核心思想TCC关联概念TCC调用一个例子:转账场景下的TCC实现分布式事务的由来和TCC的核心思想和工作流程写在前面分布式事务是一个大的命题,有很多相关的技术和细节。网上介绍这个主题的文章也是多如牛毛,但是能把问题的来龙去脉给讲清楚的文章并不多。我也不敢说自己就一定能够把这个本来就很复杂的事情讲的有多通透。...

2019-06-15 21:33:28

CLH锁的原理和实现

前情回顾上一篇文章中主要讨论了MCS自旋锁的特点和其适用场景,并分析了其原理和实现细节。MCS锁存在的问题MCS锁解决了简单自旋锁的一个最大痛点:频繁地缓存同步操作会导致繁重的系统总线和内存的流量,从而大大降低了系统整体的性能。解决这个问题的思路是将自旋操作限制在一个本地变量上,从而在根本上避免了频繁地多CPU之间的缓存同步。但是MCS锁的实现并不简单,需要注意的事项主要有以下...

2018-04-07 16:12:17

MCS锁的原理和实现

前情回顾上一篇文章中主要讨论了自旋锁的特点和其适用场景,然后给出了两种自旋锁的简单实现。存在的问题无论是简单的非公平自旋锁还是公平的基于排队的自旋锁,由于执行线程均在同一个共享变量上自旋,申请和释放锁的时候必须对该共享变量进行修改,这将导致所有参与排队自旋锁操作的处理器的缓存变得无效。如果排队自旋锁竞争比较激烈的话,频繁的缓存同步操作会导致繁重的系统总线和内存的流量,从而大大降低了...

2018-04-01 22:51:47

简单的非公平自旋锁以及基于排队的公平自旋锁的实现

基础什么是自旋锁由于本文主要讨论的都是自旋锁,所以首先就需要弄明白什么是自旋锁。自旋锁最大的特征,就是它会一直循环检测锁的状态,当锁处于被占用的状态时,不会将当前线程阻塞住,而是任由它继续消耗CPUCycles,直到发现需要的锁处于可用状态。有了这一层了解,自旋锁的优势和劣势,以及其适用场景也就一目了然了。优势:没有线程阻塞,也就没有了线程上下文切换带来的开销...

2018-03-24 14:47:52

为什么volatile++不是原子性的?

问题在讨论原子性操作时,我们经常会听到一个说法:任意单个volatile变量的读写具有原子性,但是volatile++这种操作除外。所以问题就是:为什么volatile++不是原子性的?答案因为它实际上是三个操作组成的一个符合操作。首先获取volatile变量的值将该变量的值加1将该volatile变量的值写会到对应的主存地址一个很简单的例子:如果两个线程在...

2018-03-18 21:23:19

[Spring Boot] 5. Spring Boot中的ApplicationContext - 执行ApplicationContextInitializer初始化器

前面已经对SpringBoot启动过程进行过源码分析,对于代表容器上下文的关键字段ApplicationContext只是一笔带过。实际上,它的生命周期才应该是重点关注的。SpringBoot使用的ApplicationContext分两种场景,常规应用和Web应用使用的上下文类型不一样:常规应用:org.springframework.context.annotation.Annotatio

2017-08-27 12:50:17

[Spring Boot] 4. Spring Boot实现自动配置的原理

入口注解类@EnableAutoConfiguration@SpringBootApplication注解中包含了自动配置的入口注解:@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBootConfiguration@EnableAutoConfiguration

2017-08-27 12:44:17

[Spring Boot] 3. Spring Boot实现自动配置的基础

在第一篇文章介绍SpringBoot启动过程,提到了SpringBoot的核心能力-自动配置。这个能力也是SpringBoot非常大的卖点之一。对这个能力,相信很多同学都会比较好奇,SpringBoot是如何实现它的呢?但是在详细探究SpringBoot是如何实现自动配置之前,首先需要明确问题的来源是什么,以及了解目前Spring框架中提供的相关能力。引子问题是什么Spring中纷繁复

2017-08-20 23:00:20

[Spring Boot] 2. Spring Boot 启动过程定制化

在上一篇文章中,从源码角度介绍了SpringBoot的启动过程。启动的代码虽然只有短短的一行,但是背后所做的工作还真不少,其中有一些可以定制化的部分,主要分为以下几个方面:初始化器(Initializer)监听器(Listener)容器刷新后置Runners(ApplicationRunner或者CommandLineRunner接口的实现类)启动期间在Console打印Banner的具体

2017-08-13 22:45:21

[Spring Boot] 1. Spring Boot启动过程源码分析

关于SpringBoot,已经有很多介绍其如何使用的文章了,本文从源代码(基于Spring-boot1.5.6)的角度来看看SpringBoot的启动过程到底是怎么样的,为何以往纷繁复杂的配置到如今可以这么简便。1.入口类packagecom.example.demo;importorg.springframework.boot.SpringApplication;importorg

2017-08-05 21:25:54

[AOP] 7. 一些自定义的Aspect - Circuit Breaker

CircuitBreaker(断路器)模式关于断路器模式是在微服务架构/远程调用环境下经常被使用到的一个模式。它的作用一言以蔽之就是提高系统的可用性,在出现的问题通过服务降级的手段来保证系统的整体可用,而不至于因为部分问题导致整个系统不可用。用下面这张图可以很好的说明它能够解决的问题:图片引用自参考资料1。其中从client和supplier可以分别理解成调用者和远程方法。在没有Circuit

2017-07-30 13:40:12

[AOP] 6. 一些自定义的Aspect - 方法的重试(Retry)

前面的一系列文章介绍了AOP的方方面面:AOP的由来以及快速上手AOP的两种实现-SpringAOP以及AspectJSpringAOP中提供的种种Aspects-Tracing相关SpringAOP中提供的种种Aspects-异步执行SpringAOP中提供的种种Aspects-并发控制从本篇文章开始,会介绍一些基于AOP原理的自定义Aspect实现,用来解决在开发

2017-06-03 12:01:10

[AOP] 5. Spring AOP中提供的种种Aspects - 并发控制

本文继续讨论ConcurrencyThrottleInterceptor(基于Spring4.3.7)。以及上一篇文章中遗留的一个关于SimpleAsyncTaskExecutor类中属性concurrencyLimit的问题。这些都和并发控制相关。但是这里需要事先说明的一点是,这些类和实现的年代都比较久远了,比如ConcurrencyThrottleInterceptor是在2004年的Spri

2017-04-05 11:30:22
CSDN身份
  • 博客专家
奖章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周上午根据用户上周的博文发布情况由系统自动颁发。