JAVA ’ 目录归档

Netty(二) 从线程模型的角度看 Netty 为什么是高性能的?

前言

在之前的 SpringBoot 整合长连接心跳机制 一文中认识了 Netty。

但其实只是能用,为什么要用 Netty?它有哪些优势?这些其实都不清楚。

本文就来从历史源头说道说道。

阅读全文


分布式消息中间件 RocketMQ:概述与源码编译篇

一、前言

Apache RocketMQ 是一个分布式消息中间件,其具有低延迟、高性能和可靠性、万亿级容量、灵活的可扩展性特性;它是阿里巴巴在2012年开源的分布式消息中间件,目前已经捐赠给 Apache 软件基金会,并于2017年9月25日成为 Apache 的顶级项目。 阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 分布式消息中间件 RocketMQ:概述与源码编译篇


Guava 源码分析(Cache 原理【二阶段】)

前言

在上文「Guava 源码分析(Cache 原理)」中分析了 Guava Cache 的相关原理。

文末提到了回收机制、移除时间通知等内容,许多朋友也挺感兴趣,这次就这两个内容再来分析分析。

在开始之前先补习下 Java 自带的两个特性,Guava 中都有具体的应用。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Guava 源码分析(Cache 原理【二阶段】)


Apache Pulsar介绍

Apache Pulsar

What is Pulsar

“Pulsar is a distributed pub-sub messaging platform with a very flexible messaging model and an intuitive client API.”

Pulsar是pub-sub模式的分布式消息平台,拥有灵活的消息模型和直观的客户端API。

Pulsar由雅虎开发并开源的下一代消息系统,目前是Apache软件基金会的孵化器项目。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Apache Pulsar介绍


Spring&Mybaits数据库配置解惑

一、前言

一般我们会在datasource.xml中进行如下配置,但是其中每个配置项原理和用途是什么,并不是那么清楚,如果不清楚的话,在使用时候就很有可能会遇到坑,所以下面对这些配置项进行一一解说 阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Spring&Mybaits数据库配置解惑


一次线上问题排查所引发的思考

前言

之前或多或少分享过一些内存模型对象创建之类的内容,其实大部分人看完都是懵懵懂懂,也不知道这些的实际意义。

直到有一天你会碰到线上奇奇怪怪的问题,如:

  • 线程执行一个任务迟迟没有返回,应用假死。
  • 接口响应缓慢,甚至请求超时。
  • CPU 高负载运行。

这类问题并不像一个空指针、数组越界这样明显好查,这时就需要刚才提到的内存模型、对象创建、线程等相关知识结合在一起来排查问题了。

正好这次借助之前的一次生产问题来聊聊如何排查和解决问题。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 一次线上问题排查所引发的思考


MySQL 中基于 XA 实现的分布式事务

五、MySQL 中基于 XA 实现的分布式事务

5.1 XA协议

首先我们来简要看下分布式事务处理的XA规范

 

image.png

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: MySQL 中基于 XA 实现的分布式事务


何为脏读、不可重复读、幻读

2.0 前言

事务的隔离性是指多个事务并发执行的时候相互之间不受到彼此的干扰的特性,隔离性是事务ACID特性中的I,根据隔离程度从低到高分为Read Uncommitted(读未提交),Read Committed(读已提交),Repeatable Read(可重复读),Serializable(串行化)四种隔离级别。在具体介绍事务隔离性前先介绍几个名词,以便说明数据库在并发操作时候可能存在的问题,以便展开来探讨这四种隔离级别对应存在哪些问题,哪些隔离级别解决了哪些问题。 阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 何为脏读、不可重复读、幻读


认知升级-成败取决于见识

最近在读吴军的《谷歌方法论》和《见识》,结合自己的理解分享一下里面的观点。一本书其实观点也就一页纸这么多,其他的内容都是在举例子证明这些观点。不同的人在不同的年龄段对书中观点的理解会不一样,因为观点的理解和自己的经历有关,经历和观点产生共鸣才能有所收获。所以我并没有把书中全部的观点总结出来,而是结合自己的经历来做一次分享。

人生学会做减法

生有涯,知无涯。如果做得事情不对,就算提高了效率也是徒劳,事情多效率也很难提升,所以人生要学会做减法,要学会少做事,甚至不做事,意思是自己要能识别重点做哪些事,哪些事可以不做,这些事不做天不会塌下来。因为如果把时间集中起来将事情做的比别人好,会带来十倍的收益。比如你在学习架构,可以花一个月的时间来系统化学习写一篇长篇文章,价值一定远大于你一晚上写出来的短文。人在工作中容易捡芝麻丢西瓜,喜欢做简单的事情,真正有创造性的工作做不来,捡几百个芝麻不如一个西瓜。我们需要能够跳出思维定式,换一个角度来判断一件事情的重要性,需要舍弃很多利益。能力晋升一个台阶,职责影响力增加一个数量级。大家可以思考下自己在工作中哪些是在捡芝麻,哪些是在做西瓜。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 认知升级-成败取决于见识


分布式事务- TCC编程式模式

一、前言

严格遵守ACID的分布式事务我们称为刚性事务,而遵循BASE理论(基本可用:在故障出现时保证核心功能可用,软状态:允许中间状态出现,最终一致性:不要求分布式事务打成中时间点数据都是一致性的,但是保证达到某个时间点后,数据就处于了一致性了)的事务我们称为柔性事务,其中TCC编程模式就属于柔性事务,本文我们来阐述其理论。 阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 分布式事务- TCC编程式模式


《Python3.6官方文档》– 第一章

1. 开胃小菜

如果你有许多在电脑上的工作要做,并发现其中的任务一些是可以自动化的。 例如,你可能希望执行一个能够搜索并替换大量的文本文件程序,或者是有需要以一种复杂的方式去重命名和重新排列一堆照片文件。 又或许你想写一个小的自定义数据库或专门的GUI应用程序,或简单的游戏。

如果你是一个专业的软件开发人员,你可能需要开发一个引入数个C / C ++ / Java库的程序,但发现常规的写/编译/测试/重新编译的开发方式太慢了。 也许你正在为这样一个库编写一个测试套件并发觉为它编写测试代码是一项乏味的任务。 或者,你希望使用一种可扩展的语言写一个程序,但是你并不想设计和实现一个全新的语言。

那么,Python就是为你量身定制的。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 《Python3.6官方文档》– 第一章


分布式事务- 三阶段协议

一、前言

前面我们介绍了为解决分布式事务而提出来的的二阶段协议,本文首先来讲解二阶段的不足,然后阐述三阶段协议,三阶段协议也是一个标准的协议,也并没有说具体如何实现。 阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 分布式事务- 三阶段协议


分布式事务- 二阶段协议

一、前言

在单个数据库实例时候,我们可以在一个数据源的事务(本地事务)内做多步数据库操作,在事务内的多个操作要么全部执行生效,要么全部不生效。在多数据实例节点时候,我们对多个实例的数据源进行操作时候就没办法把多个操作放到一个大的事务内来保证原子性了,因为多个实例操作的是不同的数据源,而数据库自带的事务是针对单个数据源来说的。 阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 分布式事务- 二阶段协议


Guava 源码分析之Cache的实现原理

前言

Google 出的 Guava 是 Java 核心增强的库,应用非常广泛。

我平时用的也挺频繁,这次就借助日常使用的 Cache 组件来看看 Google 大牛们是如何设计的。

缓存

本次主要讨论缓存。缓存在日常开发中举足轻重,如果你的应用对某类数据有着较高的读取频次,并且改动较小时那就非常适合利用缓存来提高性能。

缓存之所以可以提高性能是因为它的读取效率很高,就像是 CPU 的 L1、L2、L3 缓存一样,级别越高相应的读取速度也会越快。

但也不是什么好处都占,读取速度快了但是它的内存更小资源更宝贵,所以我们应当缓存真正需要的数据。其实也就是典型的空间换时间。下面谈谈 Java 中所用到的缓存。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Guava 源码分析之Cache的实现原理


Java 使用 happen-before 规则实现共享变量的同步操作

前言

熟悉 Java 并发编程的都知道,JMM(Java 内存模型) 中的 happen-before(简称 hb)规则,该规则定义了 Java 多线程操作的有序性和可见性,防止了编译器重排序对程序结果的影响。按照官方的说法:

当一个变量被多个线程读取并且至少被一个线程写入时,如果读操作和写操作没有 HB 关系,则会产生数据竞争问题。 要想保证操作 B 的线程看到操作 A 的结果(无论 A 和 B 是否在一个线程),那么在 A 和 B 之间必须满足 HB 原则,如果没有,将有可能导致重排序。 当缺少 HB 关系时,就可能出现重排序问题。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Java 使用 happen-before 规则实现共享变量的同步操作


return top