随笔分类 -  高并发

摘要:本文主要讲并行优化的几种方式, 其结构如下: 锁优化 减少锁的持有时间 例如避免给整个方法加锁 改进后 减小锁的粒度 将大对象,拆成小对象,大大增加并行度,降低锁竞争. 如此一来偏向锁,轻量级锁成功率提高. 一个简单的例子就是jdk内置的ConcurrentHashMap与SynchronizedM 阅读全文
posted @ 2018-06-25 07:18 大道方圆 阅读(11525) 评论(0) 推荐(2)
摘要:本文主要讲解几种常见并行模式, 具体目录结构如下图. 单例 单例是最常见的一种设计模式, 一般用于全局对象管理, 比如xml配置读写之类的. 一般分为懒汉式, 饿汉式. 懒汉式: 方法上加synchronized 这种方式, 由于每次获取示例都要获取锁, 不推荐使用, 性能较差 懒汉式: 使用双检锁 阅读全文
posted @ 2018-06-11 07:12 大道方圆 阅读(7571) 评论(2) 推荐(9)
摘要:线程池优势 在业务场景中, 如果一个对象创建销毁开销比较大, 那么此时建议池化对象进行管理. 例如线程, jdbc连接等等, 在高并发场景中, 如果可以复用之前销毁的对象, 那么系统效率将大大提升. 另外一个好处是可以设定池化对象的上限, 例如预防创建线程数量过多导致系统崩溃的场景. jdk中的线程 阅读全文
posted @ 2018-06-04 09:24 大道方圆 阅读(3733) 评论(0) 推荐(1)
摘要:本文主要介绍jdk中常用的同步控制工具以及并发容器, 其结构如下: 同步控制工具类 ReentrantLock 简而言之, 就是自由度更高的synchronized, 主要具备以下优点. 可重入: 单线程可以重复进入,但要重复退出 可中断: lock.lockInterruptibly() 可限时: 阅读全文
posted @ 2018-05-31 11:13 大道方圆 阅读(5444) 评论(0) 推荐(1)
摘要:目录 无锁即无障碍的运行, 所有线程都可以到达临界区, 接近于无等待. 无锁采用CAS(compare and swap)算法来处理线程冲突, 其原理如下 CAS原理 CAS包含3个参数CAS(V,E,N).V表示要更新的变量, E表示预期值, N表示新值. 仅当V值等于E值时, 才会将V的值设为N 阅读全文
posted @ 2018-05-17 00:02 大道方圆 阅读(6170) 评论(0) 推荐(0)
摘要:本文暂不讲JMM(Java Memory Model)中的主存, 工作内存以及数据如何在其中流转等等, 这些本身还牵扯到硬件内存架构, 直接上手容易绕晕, 先从以下几个点探索JMM 原子性 有序性 可见性 指令重排 CPU指令重排 编译器优化重排 Happen-Before规则 CPU指令重排 编译 阅读全文
posted @ 2018-05-06 22:31 大道方圆 阅读(27339) 评论(3) 推荐(9)
摘要:目录 线程状态切换 终止线程(stop) 中断线程(interrupt) 挂起(suspend) 和 继续执行(resume) 等待线程结束(join) 和 谦让(yield) sleep 线程优先级 守护线程 线程的同步操作(synchronized, wait, notify) 线程状态切换 终 阅读全文
posted @ 2018-05-03 23:38 大道方圆 阅读(950) 评论(1) 推荐(0)
摘要:初识 Protocol Buff是谷歌推出的一种序列化协议. 而Java序列化协议也是一种协议. 两者的目的是, 将对象序列化成字节数组, 或者说是二进制数据, 那么他们之间有什么差异呢. proto对象 要使用PB, 我们需要定义一个proto对象, 其支持的数据类型如下: Protobuf定义了 阅读全文
posted @ 2017-12-12 00:54 大道方圆 阅读(2554) 评论(0) 推荐(0)
摘要:传输会话简要 客户端发起一个文本请求给服务器端, 服务器端解析里面文本, 返回文件给客户端, 客户端解析文件 服务器端 因为示例文件比较小, 所以没有做分段传输, 而是直接一次性把整个文件byte[]都发给客户端了. 如果需要传输大文件, 则需要做粘包拆包, 参考另外一篇博文 Netty之粘包分包 阅读全文
posted @ 2017-12-04 17:30 大道方圆 阅读(9053) 评论(0) 推荐(0)
摘要:前言 本文旨在介绍传统Socket服务端与NIO服务端的差异. 以餐厅服务员简单举例,每个客人对应一个请求. 传统Socket / OIO 缺点 单线程情况下只能有一个客户端 用线程池可以有多个客户端连接,但是非常消耗性能 类比图 NIOServer 优点 利用Selector多路复用技术, 一个线 阅读全文
posted @ 2017-12-01 00:08 大道方圆 阅读(1145) 评论(0) 推荐(0)
摘要:粘包现象 客户端在一个for循环内连续发送1000个hello给Netty服务器端, 而在服务器端接受到的信息并不是预期的1000个独立的Hello字符串. 实际上是无序的hello字符串混合在一起, 如图所示. 这种现象我们称之为粘包. 为什么会出现这种现象呢? TCP是个”流”协议,流其实就是没 阅读全文
posted @ 2017-11-29 00:48 大道方圆 阅读(6136) 评论(0) 推荐(0)