正文内容加载中...
posted @ 2019-06-18 09:52 gyc567 阅读(7) 评论(0) 编辑
摘要: 聊聊分布式事务,再说说解决方案 前言 最近很久没有写博客了,一方面是因为公司事情最近比较忙,另外一方面是因为在进行 CAP 的下一阶段的开发工作,不过目前已经告一段落了。 接下来还是开始我们今天的话题,说说分布式事务,或者说是我眼中的分布式事务,因为每个人可能对其的理解都不一样。 分布式事务是企业集阅读全文
posted @ 2019-06-18 08:32 gyc567 阅读(4) 评论(0) 编辑
摘要: 今天开始写一些高并发实战系列。 本系列主要讲两大主流框架: Netty和Quasar(java纤程库) 先介绍netty吧,netty是业界比较成熟的高性能异步NIO框架。 简单来说,它就是对NIO2的封装,但提供了更好用,bug更少的API。 为什么netty能提供高性能?核心要点有以下两点: 1阅读全文
posted @ 2019-06-17 11:10 gyc567 阅读(10) 评论(0) 编辑
摘要: 原文:https://zhuanlan.zhihu.com/p/26757689 引言 不知道是不是我自己本身就有那么一丝丝的密集恐惧,把这么一大堆看起来很相似很相关的概念放在一起,看起来是有点麻,捋一捋感觉舒服多了。 相关概念 任务、作业(Job,Task,Schedule) 在进程的概念出现之前阅读全文
posted @ 2019-06-16 11:01 gyc567 阅读(5) 评论(0) 编辑
摘要: Java线程与Linux内核线程的映射关系 Java线程与Linux内核线程的映射关系Linux从内核2.6开始使用NPTL (Native POSIX Thread Library)支持,但这时线程本质上还轻量级进程。 Java里的线程是由JVM来管理的,它如何对应到操作系统的线程是由JVM的实现阅读全文
posted @ 2019-06-16 10:49 gyc567 阅读(4) 评论(0) 编辑
摘要: 原文:https://www.cnblogs.com/zhaoyl/p/3620204.html 首先从OS设计原理上阐明三种线程:内核线程、轻量级进程、用户线程 内核线程 内核线程就是内核的分身,一个分身可以处理一件特定事情。这在处理异步事件如异步IO时特别有用。内核线程的使用是廉价的,唯一使用的阅读全文
posted @ 2019-06-16 10:47 gyc567 阅读(3) 评论(0) 编辑
摘要: 上节提到的:伪共享,今天我们来说说。 那什么是伪共享呢? 这得从CPU的缓存结构说起。以下如图,CPU一般来说是有三级缓存,1 级,2级,3级,越上面的,越靠近CPU的,速度越快,成本也越高。也就是说速度方面:1级>2级>3级。 说到这里,我们要理解一个很重要的概念:缓存行。什么是缓存行? 首先我们阅读全文
posted @ 2019-06-16 09:38 gyc567 阅读(7) 评论(0) 编辑
摘要: 今天,我们来学习另一个重要的概念。 CPU内存指令重排序(Memory Reordering) 什么叫重排序? 重排序的背景 我们知道现代CPU的主频越来越高,与cache的交互次数也越来越多。当CPU的计算速度远远超过访问cache时,会产生cache wait,过多的cache wait就会造成阅读全文
posted @ 2019-06-14 07:46 gyc567 阅读(9) 评论(0) 编辑
摘要: 继续讲CAS算法,上篇文章我们知道,CAS算法底层实现,是通过CPU的原子指令来实现。 那么这里又有一个情景: 话说,有一个线程one从内存位置V中取出A,这时候另一个线程two也从内存中取出A,并且two进行了一些操作变成了B,然后two又将V位置的数据变成A,这时候线程one进行CAS操作发现内阅读全文
posted @ 2019-06-13 21:19 gyc567 阅读(11) 评论(0) 编辑
摘要: 上篇文章,我们主要讲了解决多线程之间共享数据的核心问题和解决方案,也讲了锁的简单分类。 那么,这把锁,我们应该怎么去实现呢?如果你是java语言设计者,你又会怎么去设计这个线程锁呢? 直觉告诉我们,我们可以设计一个对象或属性,用来代表锁。比如,你把共享数据区当成抽屉,那这个抽屉就可设计出有锁,有钥匙阅读全文
posted @ 2019-06-13 11:31 gyc567 阅读(40) 评论(1) 编辑