锁是一种悲观策略,总是觉得会出问题,所以小心翼翼地操作。 无锁是一种乐观策略,总是假设不会出现问题,如果出现问题,那就重新操作。无锁一般使用CAS作为策略。 比较交换CAS: CAS算法包括三个参数:需要更新的变量,预期值,更新值。只有当需要更新的值等于预期值时,说明其他线程没有对它进行操作,使需要 ...
分类:
编程语言 时间:
2018-08-07 16:48:17
阅读次数:
177
一、并行世界 摩尔定律的失效,2004年秋季,Intel宣布彻底取消4GHz计划,CPU向多核心的发展,顶级计算机科学家唐纳德丶尔文丶克努斯评价:在我看来,这种现象(并发)或多或少是由于硬件设计者已经无计可施导致的,他们将摩尔定律失效的责任推脱给软件开发者。 1、几个概念 同步和异步: 并发与并行: ...
分类:
编程语言 时间:
2018-08-06 13:42:15
阅读次数:
198
DBUtils是Python的一个用于实现数据库连接池的模块。 此连接池有两种连接模式: 模式一:为每个线程创建一个连接,线程即使调用了close方法,也不会关闭,只是把连接重新放到连接池,供自己线程再次使用。当线程终止时,连接自动关闭。 POOL = PersistentDB( creator=p ...
分类:
数据库 时间:
2018-07-26 22:05:23
阅读次数:
169
Vert.x是一个基于JVM、轻量级、高性能的应用平台,非常适用于最新的移动端后台、互联网、企业应用架构。Vert.x基于全异步Java服务器Netty,并扩展出了很多有用的特性。 同时支持多种编程语言 异步无锁编程 对各种IO的丰富支持 极好的分布式开发支持 生态体系日趋成熟 Reactor模式 ...
分类:
其他好文 时间:
2018-07-19 21:16:22
阅读次数:
176
1. 锁优化的思路和方法 这里提到的锁优化,是指在阻塞式的情况下,如何让性能不要变得太差。但是再怎么优化,一般来说性能都会比无锁的情况差一点。 这里要注意的是,在ReentrantLock中的tryLock,偏向于一种无锁的方式,因为在tryLock判断时,并不会把自己挂起。 锁优化的思路和方法总结 ...
分类:
编程语言 时间:
2018-07-15 17:39:08
阅读次数:
144
1. 从乐观锁和悲观锁谈起 乐观锁和悲观锁是两种不同的解决并发问题的策略。悲观锁策略假定任何一次并发都会发生冲突,所以总是采用最严格的方式来进行并发控制。java中的独占锁(synchronized和重入锁)就是典型悲观锁实现,它只允许线程互斥的访问临界区,也就是阻塞式的同步方式。而乐观锁策略假定大 ...
分类:
其他好文 时间:
2018-07-14 19:28:30
阅读次数:
311
1.非阻塞算法 如果在算法中,一个线程的失败或挂起不会导致其他线程也失败或挂起,那么这种算法就称为非阻塞算法。如果这种算法的每个步骤中都存在某个线程能够执行下去,那么这种算法也称为无锁算法。 这种算法利用底层的原子机器指令代替锁来确保数据在并发访问中的一致性。 2.硬件对并发的支持 2.1 CAS( ...
分类:
其他好文 时间:
2018-07-11 20:38:05
阅读次数:
132
预备知识 Java对象(非数组):用来存储锁,由对象头、实例数据、对齐填充数据组成。 对象头:由MarkWord、类型指针组成。32位JVM下的Markword占32位,存储的数据取决于锁的状态。 初始是无锁状态。 在运行期间MarkWord里存储的数据会随着锁状态的变化而变化 Monitor 类型 ...
分类:
其他好文 时间:
2018-07-10 20:16:32
阅读次数:
204
环形缓冲区是生产者和消费者模型中常用的数据结构。生产者将数据放入数组的尾端,而消费者从数组的另一端移走数据,当达到数组的尾部时,生产者绕回到数组的头部。如果只有一个生产者和一个消费者,那么就可以做到免锁访问环形缓冲区(Ring Buffer)。写入索引只允许生产者访问并修改,只要写入者在更新索引之前 ...
分类:
其他好文 时间:
2018-07-05 21:23:28
阅读次数:
188
本文主要介绍 java中在并发环境下,有哪些方案实现线程安全,注意 线程问题主要由内存模型引起的(在基础篇中) 目录 valotile可见性 CAS无锁编程 内置锁(同步关键字synchronied) 显示锁(lock) valotile可见性 1 volatile关键字的两层语义(一旦一个共享变量 ...
分类:
编程语言 时间:
2018-06-22 13:38:44
阅读次数:
199