并发
binling
这个作者很懒,什么都没留下…
展开
-
zookeeper 和分布式系统的一般问题
什么是分布式系统,就是系统由多台机器组成,每台机器上有不同的role,mediaroom就是典型的分布式系统。具体化一下,多台机器其实就是多process,不要觉得机器上有很多程序,在系统设计领域,说一台机器实质上就是说一个process。只不过是不同机器上的process,和同一台机器上的多进程相比,不能用OS系统调用或者本地磁盘的机制进行同步或者数据共享。process是什么就是一原创 2015-07-28 19:37:36 · 1421 阅读 · 0 评论 -
等待锁和等待条件、临界区实现、读写锁实现
之前总结过,线程的halt只有两种可能,等待锁(lock.lock(), synchronized(lock))和等待条件(condition.await(), object.wait())其他的synchronizer,比如CountDownLatch, Barrier,BlockingQueue等,都是基于等待条件的,可以用condition实现。而condition又以锁为基础,cond原创 2015-11-23 00:35:26 · 1996 阅读 · 0 评论 -
一致性的3种协议,并发,事务
Two Phase CommitMVCCPaxosTPC对应于传统数据库上的local cluster的一致性,分布式事务,每个节点上的local事务可以是不同的亦可以是相同的(replica)MVCC的思想是抓住Transaction的本质:server state从一个一致性state迁移到另一个一致性state,也就是Transaction是工作在一个snap原创 2016-04-14 16:26:54 · 481 阅读 · 0 评论 -
死锁怎么检测?
先OO分析、建模,再研究具体问题。这里面涉及的对象:1)线程2)锁关系:占有:线程——锁 的一对多关系:一个线程可以占有多个锁,一个锁只能被一个线程占有等待:线程——锁 的多对多关系:一个线程可以等待多个锁,一个锁可以被多个线程等待间接等待关系 线程——线程 的多对多关系,一个线程A等待的锁被另一个线程B拥有,则线程A对线程B有等待关系输入模型:线程列表,锁列表原创 2015-10-09 15:51:05 · 2955 阅读 · 0 评论 -
Java中 Happen-before 规则总结
详细见:http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/package-summary.html比较重要的几条1)Actions prior to "releasing" synchronizer methods such as Lock.unlock,Semaphore.release, and CountD原创 2015-12-18 16:20:39 · 1511 阅读 · 0 评论 -
多线程、锁,可重入,同步,原子性,可见性,非阻塞算法
问题1 什么是Re-entrant Lock锁的acquire是per thread 的, 而不是per call的,也就是同一个线程再次申请已经获得的锁,直接成功返回。如果是非re-entrant的锁,一个线程试图获取已经获得的锁会死锁,因为当前线程会挂起,没有机会release锁synchronized的锁和 ReentrantLock都是 Re-entrant Lock问原创 2015-07-15 19:20:23 · 1519 阅读 · 0 评论 -
Java各种Synchronizer: CountDownLatch, CyclicBarrier,Semaphore
首先,锁也是一种Synchronizer ,包括ReentrantLock, synchronized,是为了确保共享数据被完整一致的修改,不被破坏。其他的,比如Object.wait(), notify()等 主要用于合作的线程之间彼此协调CountDownLatch有两个方法await() 和countDown(),用于主线程调用latch.await(),每个原创 2015-07-22 20:48:29 · 522 阅读 · 0 评论 -
事务的并发控制big picture
Goal:即满足一致性又尽量提高吞吐量Sequential equivalence checking: 两个事务的所有conflicting operation pair的相对顺序都是一样的悲观并发控制:用锁实现 Sequential equivalence锁的理解,2个作用1)基本数据完整性,防止同时修改导致的坏数据,2)操作完整性、事务完整性,复合状态的完整性,比如原创 2015-12-19 21:51:47 · 599 阅读 · 0 评论 -
version vector 和 vector timestamp(clock)
version vector 和 vector timestamp是 causality 关系的在分布式系统两个领域上的应用,前者是replica之间的causality关系,后者是event 的的causality关系对于前者一般用compatible 和 conflict,后者一般用happen-before 和 concurrent两个replica的version是compatib原创 2015-12-16 16:21:15 · 1234 阅读 · 0 评论 -
几种自旋锁SpinLock,TicketLock,CLHLock,以及可重入实现要点,非阻塞锁实现要点
最核心的东西:synchronization state,同步状态:指示当前线程是否可以proceed还是需要wait的状态。1.普通SpinLock (支持可重入的版本)class SpinLock { private AtomicReference owner = new AtomicReference(); // use thread itself as synchronizat原创 2015-12-28 17:03:22 · 5381 阅读 · 3 评论 -
什么是Service, 以及Service 模板
Service本质就是一个驻留Process,驻留Prcess至少有一个驻留线程,这个线程处在waiting的状态(相对于Runable),控制流停在某个点上,受外部事件驱动,或者是自己的timer驱动。Windows Service是一个exe,要有Main方法,Main方法要把一个继承了ServiceBase、实现了OnStart(), OnStop()等生命周期回调方法的Servic原创 2015-09-08 16:13:08 · 1165 阅读 · 0 评论 -
如何提高并发度?读写锁,分拆锁、分离锁,ThreadLocal,copyOnWrite,工作队列 per thread, 工作窃取
读写锁读写锁并没有分拆锁定粒度,而是区分操作的性质,读与读可以并发,读-写,写-写互斥,只有写是独占锁。分拆锁和分离锁的思想都是对于复杂数据机构,不同的部分对应不同的锁,降低锁的粒度分拆锁,splitingLock独立不相关的数据用不同的锁,比如一个对象有很多字段,这些字段是独立的,而不是组合起来表示一个逻辑数据(比如firstName, lastName,必须组合起来表示原创 2015-07-22 17:53:28 · 3154 阅读 · 0 评论 -
我的java DCL-based Singleton
1)instance完全创建好了,另一个线程得到的还是null:用volatile解决2)对象内存块地址赋给了instance,但对象还没完全construct完毕:先访问一下对象,再赋instance,class Singleton { private volatile Singleton instance = null; private Singleton() {} public原创 2015-12-21 15:59:55 · 461 阅读 · 0 评论