SlideShare une entreprise Scribd logo
1  sur  26
Télécharger pour lire hors ligne
并发队列篇
作者:周忱 | 数据平台-DXP
微博:@MinZhou
邮箱:zhouchen.zm@taobao.com
Java并发编程优化之阻塞队列
关于我
• 花名:周忱(chén)
• 真名:周敏
• 微博: @MinZhou
• Twitter: @minzhou
• 2010年6月加入淘宝
• 曾经淘宝Hadoop&Hive研发
组Leader
• 目前云梯跨机房临时工
• Hive Contributor
• 自由、开源软件热爱者
Data eXchange Platform| zhouchen.zm
Java并发编程优化之阻塞队列
关于我
• 花名:周忱(chén)
• 真名:周敏
• 微博: @MinZhou
• Twitter: @minzhou
• 2010年6月加入淘宝
• 曾经淘宝Hadoop&Hive研发
组Leader
• 目前云梯跨机房临时工
• Hive Contributor
• 自由、开源软件热爱者
Data eXchange Platform| zhouchen.zm
队列是什么?
Java并发编程优化之阻塞队列
Data eXchange Platform| zhouchen.zm
队列是什么?
Java并发编程优化之阻塞队列
Data eXchange Platform| zhouchen.zm
队列的运用
Java并发编程优化之阻塞队列
Data eXchange Platform| zhouchen.zm
ArrayBlockingQueue & LinkedBlockingQueue
Java并发编程优化之阻塞队列
Data eXchange Platform| zhouchen.zm
• BlockingQueue
• ArrayBlockingQueue: 数组实现
• LinkedBlockingQueue: 链表实现
• Ops约300万
队列的性能问题
Java并发编程优化之阻塞队列
Data eXchange Platform| zhouchen.zm
• Linked list is the EVIL of performance
• 在head, tail和size三个变量的写冲突
• put/take和offer/poll上的大锁
• GC问题
单Writer原则
Java并发编程优化之阻塞队列
Data eXchange Platform| zhouchen.zm
方法 时间(ms)
单线程 long 300
单线程 volatile long 4,700
单线程 AtomicLong(CAS ) 5,700
双线程 AtomicLong(CAS ) 18,000
单线程synchronized + long 10,000
双线程synchronized + long 118,000
• 一个变量递增500,000,000次所需时间
第一步:环形队列
Java并发编程优化之阻塞队列
Data eXchange Platform| zhouchen.zm
• 没有写冲突, 不需要上锁, 甚至不需要CAS
• 采用volatile关键字让对方线程可见
• 不需要维护size
• Ops约1100万
内存屏障
Java并发编程优化之阻塞队列
Data eXchange Platform| zhouchen.zm
• Load Buffer
• Store Buffer
• CPU串行化指令
– CPUID
– SFENCE
– LFENCE
– MFENCE
• Lock系指令
第二步:lazySet
Java并发编程优化之阻塞队列
Data eXchange Platform| zhouchen.zm
• AtomicXXX.lazySet()保证StoreStore
• 但不保证StoreLoad
• 保证最终一致性
• 一个轻量的volatile
• Unsafe.putOrderedXXX
• Ops约1700万
"This is a niche method that is sometimes useful
when fine-tuning code using non-blocking data
structures. The semantics are that the write is
guaranteed not to be re-ordered with any previous
write, but may be reordered with subsequent
operations(or equivalently, might not be visible to
other threads) until some other volatile write or
synchronizing action occurs).“
--Doug Lea
第三步:求模优化
Java并发编程优化之阻塞队列
Data eXchange Platform| zhouchen.zm
• & (k pow 2) - 1 替代%
• Ops约2200万
public boolean offer(final E e) {
…
buffer[(int) (currentTail % buffer.length)] = e;
…
}
public boolean offer(final E e) {
…
buffer[(int) currentTail & mask] = e;
…
}
False Sharing
Java并发编程优化之阻塞队列
Data eXchange Platform| zhouchen.zm
第四步:去除伪共享
Java并发编程优化之阻塞队列
Data eXchange Platform| zhouchen.zm
• Ops约4000万
public class PaddedAtomicLong extends AtomicLong {
private static final long serialVersionUID = 1L;
public PaddedAtomicLong() {
}
public PaddedAtomicLong(final long initialValue) {
super(initialValue);
}
public long p1, p2, p3, p4, p5, p6;
}
CPU Cache
Java并发编程优化之阻塞队列
Data eXchange Platform| zhouchen.zm
内存排布对性能的影响
Java并发编程优化之阻塞队列
Data eXchange Platform| zhouchen.zm
• 测试
– 顺序读取内存数据
– 在一个内存页内随机, 然后转到另外的页内随机
– 全随机访问
• https://gist.github.com/coderplay/4453283
Cache Line
Java并发编程优化之阻塞队列
Data eXchange Platform| zhouchen.zm
cat /sys/devices/system/cpu/cpu0/cache/index0/*
第五步:优化内存排布
Java并发编程优化之阻塞队列
Data eXchange Platform| zhouchen.zm
• 使用Direct ByteBuffer
• 使用Unsafe使页对齐
• 内存连续
• Ops约6800万
第六步:yield() vs LockSupport.parkNanos(1)
Java并发编程优化之阻塞队列
Data eXchange Platform| zhouchen.zm
• 减少StoreLoad
• 减少CPU相干性的噪声,从而提高cache命中
• Ops约1亿1000万
其它优化
Java并发编程优化之阻塞队列
Data eXchange Platform| zhouchen.zm
• 环形队列预分配,零GC
• 批量生产及消费
• Wait free
• Ops可达2亿2000万!
• CPU亲缘
思考
Java并发编程优化之阻塞队列
Data eXchange Platform| zhouchen.zm
• 多消费者
• 多生产者
工具
Java并发编程优化之阻塞队列
Data eXchange Platform| zhouchen.zm
• top
• vmstat
• lscpu
• perf
• Valgrind tools suite
• OProfile
• SystemTap
• numactl
• Intel Vtune
• Intel PTU
• Intel PCM + ksysguard
• MAT
代码
Java并发编程优化之阻塞队列
Data eXchange Platform| zhouchen.zm
$git clone https://github.com/coderplay/javaopt.git
$java –cp bin javaopt.queue.QueuePerfTest n
推荐读物
Java并发编程优化之阻塞队列
Data eXchange Platform| zhouchen.zm
• What every programmer should know about memory
• Intel® 64 and IA-32 Architectures Software Developer Manuals
• The Art of Multiprocessor Programming
• The JSR-133 Cookbook for Compiler Writers (Java Memory Model)
• 本人博客: http://coderplay.javaeye.com
Q & A
Data eXchange Platform| zhouchen.zm
Java并发编程优化之阻塞队列
作者:周忱 | 数据平台-DXP
微博:@MinZhou
邮箱:zhouchen.zm@taobao.com

Contenu connexe

Tendances

分布式Key Value Store漫谈
分布式Key Value Store漫谈分布式Key Value Store漫谈
分布式Key Value Store漫谈Tim Y
 
淘宝前台系统性能分析与优化
淘宝前台系统性能分析与优化淘宝前台系统性能分析与优化
淘宝前台系统性能分析与优化丁 宇
 
Spark 巨量資料處理基礎教學
Spark 巨量資料處理基礎教學Spark 巨量資料處理基礎教學
Spark 巨量資料處理基礎教學NUTC, imac
 
系统性能分析和优化.ppt
系统性能分析和优化.ppt系统性能分析和优化.ppt
系统性能分析和优化.pptFrank Cai
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合Qiangning Hong
 
大資料趨勢介紹與相關使用技術
大資料趨勢介紹與相關使用技術大資料趨勢介紹與相關使用技術
大資料趨勢介紹與相關使用技術Wei-Yu Chen
 
大型互联网站性能优化
大型互联网站性能优化大型互联网站性能优化
大型互联网站性能优化丁 宇
 
MapReduce 簡單介紹與練習
MapReduce 簡單介紹與練習MapReduce 簡單介紹與練習
MapReduce 簡單介紹與練習孜羲 顏
 
Data Analyse Black Horse - ClickHouse
Data Analyse Black Horse - ClickHouseData Analyse Black Horse - ClickHouse
Data Analyse Black Horse - ClickHouseJack Gao
 
线上问题排查交流
线上问题排查交流线上问题排查交流
线上问题排查交流Edward Lee
 
Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計Wei-Yu Chen
 
HDFS與MapReduce架構研討
HDFS與MapReduce架構研討HDFS與MapReduce架構研討
HDFS與MapReduce架構研討Billy Yang
 
Hadoop 0.20 程式設計
Hadoop 0.20 程式設計Hadoop 0.20 程式設計
Hadoop 0.20 程式設計Wei-Yu Chen
 
Track A-3 Enterprise Data Lake in Action - 搭建「活」的企業 Big Data 生態架構
Track A-3 Enterprise Data Lake in Action - 搭建「活」的企業 Big Data 生態架構Track A-3 Enterprise Data Lake in Action - 搭建「活」的企業 Big Data 生態架構
Track A-3 Enterprise Data Lake in Action - 搭建「活」的企業 Big Data 生態架構Etu Solution
 
淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践丁 宇
 
曲琳 购物搜索引擎架构的变与不变——一淘网搜索技术分享0731
曲琳 购物搜索引擎架构的变与不变——一淘网搜索技术分享0731曲琳 购物搜索引擎架构的变与不变——一淘网搜索技术分享0731
曲琳 购物搜索引擎架构的变与不变——一淘网搜索技术分享0731drewz lin
 

Tendances (20)

DAE
DAEDAE
DAE
 
分布式Key Value Store漫谈
分布式Key Value Store漫谈分布式Key Value Store漫谈
分布式Key Value Store漫谈
 
Hadoop hive
Hadoop hiveHadoop hive
Hadoop hive
 
淘宝前台系统性能分析与优化
淘宝前台系统性能分析与优化淘宝前台系统性能分析与优化
淘宝前台系统性能分析与优化
 
Spark 巨量資料處理基礎教學
Spark 巨量資料處理基礎教學Spark 巨量資料處理基礎教學
Spark 巨量資料處理基礎教學
 
系统性能分析和优化.ppt
系统性能分析和优化.ppt系统性能分析和优化.ppt
系统性能分析和优化.ppt
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合
 
大資料趨勢介紹與相關使用技術
大資料趨勢介紹與相關使用技術大資料趨勢介紹與相關使用技術
大資料趨勢介紹與相關使用技術
 
大型互联网站性能优化
大型互联网站性能优化大型互联网站性能优化
大型互联网站性能优化
 
MapReduce 簡單介紹與練習
MapReduce 簡單介紹與練習MapReduce 簡單介紹與練習
MapReduce 簡單介紹與練習
 
Data Analyse Black Horse - ClickHouse
Data Analyse Black Horse - ClickHouseData Analyse Black Horse - ClickHouse
Data Analyse Black Horse - ClickHouse
 
线上问题排查交流
线上问题排查交流线上问题排查交流
线上问题排查交流
 
Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計
 
HDFS與MapReduce架構研討
HDFS與MapReduce架構研討HDFS與MapReduce架構研討
HDFS與MapReduce架構研討
 
Hadoop 0.20 程式設計
Hadoop 0.20 程式設計Hadoop 0.20 程式設計
Hadoop 0.20 程式設計
 
Track A-3 Enterprise Data Lake in Action - 搭建「活」的企業 Big Data 生態架構
Track A-3 Enterprise Data Lake in Action - 搭建「活」的企業 Big Data 生態架構Track A-3 Enterprise Data Lake in Action - 搭建「活」的企業 Big Data 生態架構
Track A-3 Enterprise Data Lake in Action - 搭建「活」的企業 Big Data 生態架構
 
Something about Kafka - Why Kafka is so fast
Something about Kafka - Why Kafka is so fastSomething about Kafka - Why Kafka is so fast
Something about Kafka - Why Kafka is so fast
 
淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践
 
SMACK Dev Experience
SMACK Dev ExperienceSMACK Dev Experience
SMACK Dev Experience
 
曲琳 购物搜索引擎架构的变与不变——一淘网搜索技术分享0731
曲琳 购物搜索引擎架构的变与不变——一淘网搜索技术分享0731曲琳 购物搜索引擎架构的变与不变——一淘网搜索技术分享0731
曲琳 购物搜索引擎架构的变与不变——一淘网搜索技术分享0731
 

En vedette

Java程序员也需要了解CPU
Java程序员也需要了解CPUJava程序员也需要了解CPU
Java程序员也需要了解CPUMin Zhou
 
Anthill: A Distributed DBMS Based On MapReduce
Anthill: A Distributed DBMS Based On MapReduceAnthill: A Distributed DBMS Based On MapReduce
Anthill: A Distributed DBMS Based On MapReduceMin Zhou
 
Big Data Analytics Infrastructure
Big Data Analytics InfrastructureBig Data Analytics Infrastructure
Big Data Analytics InfrastructureMin Zhou
 
Concurrency in Java
Concurrency in  JavaConcurrency in  Java
Concurrency in JavaAllan Huang
 

En vedette (6)

Redpoll
RedpollRedpoll
Redpoll
 
Java程序员也需要了解CPU
Java程序员也需要了解CPUJava程序员也需要了解CPU
Java程序员也需要了解CPU
 
Anthill: A Distributed DBMS Based On MapReduce
Anthill: A Distributed DBMS Based On MapReduceAnthill: A Distributed DBMS Based On MapReduce
Anthill: A Distributed DBMS Based On MapReduce
 
Big Data Analytics Infrastructure
Big Data Analytics InfrastructureBig Data Analytics Infrastructure
Big Data Analytics Infrastructure
 
Hive
HiveHive
Hive
 
Concurrency in Java
Concurrency in  JavaConcurrency in  Java
Concurrency in Java
 

Similaire à Java Concurrent Optimization: Concurrent Queue

DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代
DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代
DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代scott liao
 
Python 于 webgame 的应用
Python 于 webgame 的应用Python 于 webgame 的应用
Python 于 webgame 的应用勇浩 赖
 
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7Justin Lin
 
Btrace intro(撒迦)
Btrace intro(撒迦)Btrace intro(撒迦)
Btrace intro(撒迦)ykdsg
 
D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践Jackson Tian
 
文學通的開發心路歷程
文學通的開發心路歷程文學通的開發心路歷程
文學通的開發心路歷程建銘 廖
 
Terracotta And Continuent Based Clustering Architecture
Terracotta And Continuent Based Clustering ArchitectureTerracotta And Continuent Based Clustering Architecture
Terracotta And Continuent Based Clustering ArchitectureTarget Source
 
Groovy:Candy for Java Developers
Groovy:Candy for Java DevelopersGroovy:Candy for Java Developers
Groovy:Candy for Java Developersfoxgem
 
⼤語⾔模型 LLM 應⽤開發入⾨
⼤語⾔模型 LLM 應⽤開發入⾨⼤語⾔模型 LLM 應⽤開發入⾨
⼤語⾔模型 LLM 應⽤開發入⾨Wen-Tien Chang
 
千万级并发在线推送系统架构解析 | 个信互动 叶新江
千万级并发在线推送系统架构解析 | 个信互动 叶新江千万级并发在线推送系统架构解析 | 个信互动 叶新江
千万级并发在线推送系统架构解析 | 个信互动 叶新江imShining @DevCamp
 
Java Jdk6学习笔记[Ppt]
Java Jdk6学习笔记[Ppt]Java Jdk6学习笔记[Ppt]
Java Jdk6学习笔记[Ppt]yiditushe
 
Javascript primer plus
Javascript primer plusJavascript primer plus
Javascript primer plusDongxu Yao
 
开源社区生生不息的创新土壤
开源社区生生不息的创新土壤开源社区生生不息的创新土壤
开源社区生生不息的创新土壤Steven Cheng
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践taobao.com
 
Make your DVR playground using DevStack
Make your DVR playground using DevStackMake your DVR playground using DevStack
Make your DVR playground using DevStackJiang Jun
 
饿了么异构服务平台数据访问层的演进
饿了么异构服务平台数据访问层的演进饿了么异构服务平台数据访问层的演进
饿了么异构服务平台数据访问层的演进Dongyan Xu
 
饿了么异构服务平台数据访问层的演进
饿了么异构服务平台数据访问层的演进饿了么异构服务平台数据访问层的演进
饿了么异构服务平台数据访问层的演进Dongyan Xu
 

Similaire à Java Concurrent Optimization: Concurrent Queue (20)

DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代
DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代
DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代
 
Python 于 webgame 的应用
Python 于 webgame 的应用Python 于 webgame 的应用
Python 于 webgame 的应用
 
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7
 
Btrace intro(撒迦)
Btrace intro(撒迦)Btrace intro(撒迦)
Btrace intro(撒迦)
 
D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践
 
文學通的開發心路歷程
文學通的開發心路歷程文學通的開發心路歷程
文學通的開發心路歷程
 
42qu thrift1
42qu thrift142qu thrift1
42qu thrift1
 
Terracotta And Continuent Based Clustering Architecture
Terracotta And Continuent Based Clustering ArchitectureTerracotta And Continuent Based Clustering Architecture
Terracotta And Continuent Based Clustering Architecture
 
Groovy:Candy for Java Developers
Groovy:Candy for Java DevelopersGroovy:Candy for Java Developers
Groovy:Candy for Java Developers
 
⼤語⾔模型 LLM 應⽤開發入⾨
⼤語⾔模型 LLM 應⽤開發入⾨⼤語⾔模型 LLM 應⽤開發入⾨
⼤語⾔模型 LLM 應⽤開發入⾨
 
千万级并发在线推送系统架构解析 | 个信互动 叶新江
千万级并发在线推送系统架构解析 | 个信互动 叶新江千万级并发在线推送系统架构解析 | 个信互动 叶新江
千万级并发在线推送系统架构解析 | 个信互动 叶新江
 
Java Jdk6学习笔记[Ppt]
Java Jdk6学习笔记[Ppt]Java Jdk6学习笔记[Ppt]
Java Jdk6学习笔记[Ppt]
 
Javascript primer plus
Javascript primer plusJavascript primer plus
Javascript primer plus
 
getPDF.aspx
getPDF.aspxgetPDF.aspx
getPDF.aspx
 
getPDF.aspx
getPDF.aspxgetPDF.aspx
getPDF.aspx
 
开源社区生生不息的创新土壤
开源社区生生不息的创新土壤开源社区生生不息的创新土壤
开源社区生生不息的创新土壤
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践
 
Make your DVR playground using DevStack
Make your DVR playground using DevStackMake your DVR playground using DevStack
Make your DVR playground using DevStack
 
饿了么异构服务平台数据访问层的演进
饿了么异构服务平台数据访问层的演进饿了么异构服务平台数据访问层的演进
饿了么异构服务平台数据访问层的演进
 
饿了么异构服务平台数据访问层的演进
饿了么异构服务平台数据访问层的演进饿了么异构服务平台数据访问层的演进
饿了么异构服务平台数据访问层的演进
 

Java Concurrent Optimization: Concurrent Queue