随笔分类 -  java concurrent

java concurrent program.
摘要:本文旨在介绍Disruptor3.0的实现细节,首先从整体上描述了Disruptor3.0的核心类图,Disruptor3.0 DSL(领域专用语言)的实现类图,并以Disruptor官方列举的几大特性作为行文思路,看看Disruptor3.0是如何实现这些特性的:内存预加载、消除‘伪共享’、序号栅栏和序号配合使用来消除锁和CAS、批处理效应的具体实现等。 阅读全文
posted @ 2017-06-24 17:09 倒骑的驴 阅读(12308) 评论(0) 推荐(2) 编辑
摘要:本文翻译自LMAX关于Disruptor的论文,同时加上一些自己的理解和标注。Disruptor是一个高效的线程间交换数据的基础组件,它使用栅栏(barrier)+序号(Sequencing)机制协调生产者与消费者,从而避免使用锁和CAS,同时还组合使用预分配内存机制、缓存行机制(cache line)、批处理效应(batch effect)来达到高吞吐量和低时延的目标。目前Disruptor版本已经迭代至3.0,本论文是基于Disruptor1.0写就,在新版本中,相对与1.0版本,其核心设计思想没有变,只是实现细节有所调整和优化,因此,此论文仍然很有研读意义。 阅读全文
posted @ 2017-06-19 23:13 倒骑的驴 阅读(11148) 评论(3) 推荐(1) 编辑
摘要:大文件拆分问题涉及到io处理、并发编程、生产者/消费者模式的理解,是一个很好的综合应用场景,为此,花点时间做一些实践,对相关的知识做一次梳理和集成,总结一些共性的处理方案和思路,以供后续工作中借鉴。 本文将尝试由浅入深的方式表述大文件拆分的问题及不同解决方案,给出的方案不一定是最优解,也并非线上环境论证过的靠谱方式,目的只是在于通过该问题融会贯通io、多线程等基础知识理论。生产环境请慎用。 本文不会逐行讲解代码实现,而注重在方案设计及思路探讨上,会在文末附上源码demo git地址。 阅读全文
posted @ 2017-05-21 17:31 倒骑的驴 阅读(18798) 评论(3) 推荐(4) 编辑
摘要:概述 java cocurrent包提供了很多并发容器,在提供并发控制的前提下,通过优化,提升性能。本文主要讨论常见的并发容器的实现机制和绝妙之处,但并不会对所有实现细节面面俱到。 为什么JUC需要提供并发容器? java collection framework提供了丰富的容器,有map、list 阅读全文
posted @ 2017-04-23 22:11 倒骑的驴 阅读(9075) 评论(0) 推荐(1) 编辑
摘要:java cocurrent package中的Excutor体系,主要提供了实时和定时(含定频)的Excutor,支持单个线程,也支持线程池;他们的职责在于将任务执行者和任务发布者解耦。 实时任务处理可以当着定时任务的特例,ScheduledThreadPoolExecutor也提供了支持实时任务的api。线程池创建通常使用Excutors搞定,典型的线程池:单个、固定大小线程池、可调节大小线程池,自定义线程池时,需要调配好queue大小和线程池大小的关系。使用submit api将任务提交给线程池,根据实际场景,通过对应的Future接口实现类的api对任务执行情况进行监控,必要时可以将执行中的任务停止。 使用流程:创建线程池,创建任务,提交任务,跟踪并处理任务结果。 阅读全文
posted @ 2017-04-23 12:32 倒骑的驴 阅读(1677) 评论(0) 推荐(1) 编辑
摘要:BlockingQueue顾名思义‘阻塞的队列’,是指在:队列的读取行为被阻塞直到队列不为空时,队列的写入行为被阻塞直到队列不满时。BlockingQueue是java.util.concurrent工具包(jdk1.5版本引入,作者:Doug Lea)的重要基础工具,在ThreadPoolExcutor及tomcat等服务端容器中都有使用到。从代码层面剖析BlockingQueue的实现细节。 阅读全文
posted @ 2017-04-22 11:51 倒骑的驴 阅读(797) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示