SlideShare une entreprise Scribd logo
1  sur  49
Télécharger pour lire hors ligne
Алексей	Федоров,	
Одноклассники
Counter	Wars
Зачем	вы	здесь?
3
Много интересных докладов в других залах
4
Counter
public interface Counter {
long get();
void increment();
}
5
Simple Counter
class SimpleCounter implements Counter {
private long value = 0;
public long get() {
return value;
}
public void increment() {
value++;
}
}
6
Volatile Counter
class VolatileCounter implements Counter {
volatile long value = 0;
public long get() {
return value;
}
public void increment() {
value++;
}
}
7
Volatile Counter
class VolatileCounter implements Counter {
volatile long value = 0;
public long get() {
return value;
}
public void increment() {
long oldValue = value; // read
long newValue = oldValue + 1; // modify
value = newValue; // write
}
}
8
class SynchronizedCounter implements Counter {
volatile long value = 0;
public synchronized long get() {
return value;
}
public synchronized void increment() {
value++;
}
}
Synchronized Counter
9
Synchronized Counter
class SynchronizedCounter implements Counter {
long value = 0;
public synchronized long get() {
return value;
}
public synchronized void increment() {
value++;
}
}
10
Тестовый стенд
Core(TM) i7-4770
4 x 2 x 2.0 Ghz (downscaled)
Linux Ubuntu 14.04.4
3.13.0-86-generic x86_64
taskset -c 0,1,2,3 (thread affinity)
11
Бенчмарки, op/µs
Thanks to Nitsan Wakart
http://psy-lob-saw.blogspot.ru/2014/06/jdk8-update-on-scalable-counters.html
1 thread 2 threads 2 threads 2 threads4 threads8 threads
Core 0 Core 0 Cores 0,4 Cores 0,1 Cores 0-3 Cores 0-7
LONG 308 267 182 220 180 86
VOLATILE_LONG 77 77 79 22 21 35
SYNCHRONIZED 26 43 27 12 12 13
Вывод	1:	синхронизация	чего-то	стоит
13
class LockCounter implements Counter {
long value;
final Lock lock = new ReentrantLock();
public long get() {
try {
lock.lock();
return value;
} finally {
lock.unlock();
}
}
}
public void add() {
try {
lock.lock();
value += 1;
} finally {
lock.unlock();
}
}
Lock Counter
14
Lock Counter
class LockCounter implements Counter {
long value;
final Lock lock = new ReentrantLock();
public long get() {
try {
lock.lock();
return value;
} finally {
lock.unlock();
}
}
}
public void add() {
try {
lock.lock();
value += 1;
} finally {
lock.unlock();
}
}
15
Бенчмарки, op/µs
1 thread 2 threads 2 threads 2 threads4 threads8 threads
Core 0 Core 0 Cores 0,4 Cores 0,1 Cores 0-3 Cores 0-7
SYNCHRONIZED 26 43 27 12 12 13
REENTRANTLOCK 32 32 18 5 20 20
http://mechanical-sympathy.blogspot.com/2011/11/java-lock-implementations.html
http://mechanical-sympathy.blogspot.com/2011/11/biased-locking-osr-and-benchmarking-fun.html
http://www.javaspecialist.ru/2011/11/synchronized-vs-reentrantlock.html
http://dev.cheremin.info/2011/11/synchronized-vs-reentrantlock.html
16
class LockCounter implements Counter {
long value;
final Lock lock = new ReentrantLock();
public long get() {
try {
lock.lock();
return value;
} finally {
lock.unlock();
}
}
}
public void add() {
try {
lock.lock();
value += 1;
} finally {
lock.unlock();
}
}
Lock Counter
17
class LockCounter implements Counter {
long value;
final Lock lock = new ReentrantLock(true);
public long get() {
try {
lock.lock();
return value;
} finally {
lock.unlock();
}
}
}
public void add() {
try {
lock.lock();
value += 1;
} finally {
lock.unlock();
}
}
Lock Counter
18
Бенчмарки, op/µs
1 thread 2 threads 2 threads 2 threads4 threads8 threads
Core 0 Core 0 Cores 0,4 Cores 0,1 Cores 0-3 Cores 0-7
SYNCHRONIZED 26 43 27 12 12 13
UNFAIR_LOCK 32 32 18 5 20 20
FAIR_LOCK
Насколько	медленнее,	чем	unfair	lock?
19
Бенчмарки, op/µs
1 thread 2 threads 2 threads 2 threads4 threads8 threads
Core 0 Core 0 Cores 0,4 Cores 0,1 Cores 0-3 Cores 0-7
SYNCHRONIZED 26 43 27 12 12 13
UNFAIR_LOCK 32 32 18 5 20 20
FAIR_LOCK 31 5 ± 9 0.5 ± 0.3 0.26 0.24 0.23
Насколько	медленнее,	чем	unfair	lock?
На	два	порядка!
20
Бенчмарки, op/µs
Насколько	медленнее,	чем	unfair	lock?
На	два	порядка!
Страшно	ли	это?
1 thread 2 threads 2 threads 2 threads4 threads8 threads
Core 0 Core 0 Cores 0,4 Cores 0,1 Cores 0-3 Cores 0-7
SYNCHRONIZED 26 43 27 12 12 13
UNFAIR_LOCK 32 32 18 5 20 20
FAIR_LOCK 31 5 ± 9 0.5 ± 0.3 0.26 0.24 0.23
21
Как устроен типичный Core i7
CPU	4
CPU	0
CPU	5
CPU	1
CPU	6
CPU	2
CPU	7
CPU	3
L1	cache
L2	cache
L1	cache L1	cache L1	cache
L2	cache L2	cache L2	cache
L3	cache
Вывод	2:	честность	чего-то	стоит
Атомики и	CAS
24
Compare	and	Swap	— Hardware	Support
compare-and-swap
CAS
load-link / store-conditional
LL/SC
cmpxchg
ldrex/strex lwarx/stwcx
25
CAS Counter
public class CasLoopCounter implements Counter {
private AtomicLong value = new AtomicLong();
public long get() {
return value.get();
}
public void increment() {
for (;;) {
long oldValue = value.get();
long newValue = oldValue + 1;
if (value.compareAndSet(oldValue, newValue))
return;
}
}
}
26
Бенчмарки, op/µs
1 thread 2 threads 2 threads 2 threads4 threads8 threads
Core 0 Core 0 Cores 0,4 Cores 0,1 Cores 0-3 Cores 0-7
SYNCHRONIZED 26 43 27 12 12 13
UNFAIR_LOCK 32 32 18 5 20 20
CAS_LOOP
27
Бенчмарки, op/µs
1 thread 2 threads 2 threads 2 threads4 threads8 threads
Core 0 Core 0 Cores 0,4 Cores 0,1 Cores 0-3 Cores 0-7
SYNCHRONIZED 26 43 27 12 12 13
UNFAIR_LOCK 32 32 18 5 20 20
CAS_LOOP 62 62 45 10 6 5
28
Get-and-Add Counter
public class CasLoopCounter implements Counter {
private AtomicLong value = new AtomicLong();
public long get() {
return value.get();
}
public void increment() {
value.getAndAdd(1);
}
}
29
AtomicLong.getAndAdd()
30
Бенчмарки, op/µs
1 thread 2 threads 2 threads 2 threads4 threads8 threads
Core 0 Core 0 Cores 0,4 Cores 0,1 Cores 0-3 Cores 0-7
SYNCHRONIZED 26 43 27 12 12 13
UNFAIR_LOCK 32 32 18 5 20 20
CAS_LOOP 62 62 45 10 6 5
GET_AND_ADD 100 100 97 27 28 28
31
True Sharing
CPU	4
CPU	0
CPU	5
CPU	1
CPU	6
CPU	2
CPU	7
CPU	3
L1	cache
L2	cache
L1	cache L1	cache L1	cache
L2	cache L2	cache L2	cache
L3	cache
32
atomicLong.getAndAdd(5)
JDK	7u95	 JDK	8u72	
60
9 7 6
100
27 27 27
1 2 3 4
ops	/	μs
threads
33
atomicLong.getAndAdd(5)
JDK	7u95	 JDK	8u72	
60
9 7 6
100
27 27 27
1 2 3 4
ops	/	μs
threads
34
atomicLong.getAndAdd(5)
JDK	7u95	 JDK	8u72	
60
9 7 6
100
27 27 27
1 2 3 4
ops	/	μs
threads
35
loop:
mov 0x10(%rbx),%rax
mov %rax,%r11
add $0x5,%r11
lock cmpxchg %r11,0x10(%rbx)
sete %r11b
movzbl %r11b,%r11d
test %r10d,%r10d
je loop
JDK	7u95				-XX:+PrintAssembly
atomicLong.getAndAdd(5)
36
lock addq $0x5,0x10(%rbp))loop:
mov 0x10(%rbx),%rax
mov %rax,%r11
add $0x5,%r11
lock cmpxchg %r11,0x10(%rbx)
sete %r11b
movzbl %r11b,%r11d
test %r10d,%r10d
je loop
JDK	7u95				-XX:+PrintAssembly JDK	8u72 -XX:+PrintAssembly
atomicLong.getAndAdd(5)
JDK	7u95	 JDK	8u72	
60
9 7 6
100
27 27 27
1 2 3 4
ops	/	μs
threads
37 AtomicLong.getAndAdd()	— JDK	7
38 AtomicLong.getAndAdd()	— JDK	7
cmpxchg
39
AtomicLong.getAndAdd()	— JDK	8
40
AtomicLong.getAndAdd()	— JDK	8
lock addq
JVM	
Intrinsic
Вывод	3:	 не	верьте	всему,	что	написано	
в	исходниках	OpenJDK
JDK	8
43
StampedLock Counter
public class StampedLockCounter implements Counter {
private long value = 0;
private StampedLock lock = new StampedLock();
public long get() { ... }
public void add() {
long stamp = lock.writeLock();
try {
value++;
} finally{
lock.unlock(stamp);
}
}
}
44
Бенчмарки, op/µs
1 thread 2 threads 2 threads 2 threads4 threads8 threads
Core 0 Core 0 Cores 0,4 Cores 0,1 Cores 0-3 Cores 0-7
SYNCHRONIZED 26 43 27 12 12 13
UNFAIR_LOCK 32 32 18 5 20 20
CAS_LOOP 62 62 45 10 6 5
GET_AND_ADD 100 100 97 27 28 28
STAMPED_LOCK 31 31 24 5 22 21
45
Long Adder Counter
public class LongAdderCounter implements Counter {
private LongAdder value = new LongAdder();
public long get() {
return value.longValue();
}
public void increment() {
value.add(1);
}
}
46
Бенчмарки, op/µs
1 thread 2 threads 2 threads 2 threads4 threads8 threads
Core 0 Core 0 Cores 0,4 Cores 0,1 Cores 0-3 Cores 0-7
SYNCHRONIZED 26 43 27 12 12 13
UNFAIR_LOCK 32 32 18 5 20 20
CAS_LOOP 62 62 45 10 6 5
GET_AND_ADD 100 100 97 27 28 28
STAMPED_LOCK 31 31 24 5 22 21
LONG_ADDER 62 62 85 124 248 340
47
Литература
48
Материалы
• Все-все-все	— bit.ly/concurrency-interest
• Nitsan Wakart — psy-lob-saw.blogspot.com
• Алексей	Шипилёв — shipilev.net
Вопросы	и	ответы

Contenu connexe

Tendances

Lock? We don't need no stinkin' locks!
Lock? We don't need no stinkin' locks!Lock? We don't need no stinkin' locks!
Lock? We don't need no stinkin' locks!
Michael Barker
 
Csw2016 gawlik bypassing_differentdefenseschemes
Csw2016 gawlik bypassing_differentdefenseschemesCsw2016 gawlik bypassing_differentdefenseschemes
Csw2016 gawlik bypassing_differentdefenseschemes
CanSecWest
 
Hibernate Import.Sql I18n
Hibernate Import.Sql I18nHibernate Import.Sql I18n
Hibernate Import.Sql I18n
yifi2009
 

Tendances (20)

Lock? We don't need no stinkin' locks!
Lock? We don't need no stinkin' locks!Lock? We don't need no stinkin' locks!
Lock? We don't need no stinkin' locks!
 
Csw2016 gawlik bypassing_differentdefenseschemes
Csw2016 gawlik bypassing_differentdefenseschemesCsw2016 gawlik bypassing_differentdefenseschemes
Csw2016 gawlik bypassing_differentdefenseschemes
 
Non-blocking Michael-Scott queue algorithm
Non-blocking Michael-Scott queue algorithmNon-blocking Michael-Scott queue algorithm
Non-blocking Michael-Scott queue algorithm
 
Cascadia.js: Don't Cross the Streams
Cascadia.js: Don't Cross the StreamsCascadia.js: Don't Cross the Streams
Cascadia.js: Don't Cross the Streams
 
Silicon Valley JUG: JVM Mechanics
Silicon Valley JUG: JVM MechanicsSilicon Valley JUG: JVM Mechanics
Silicon Valley JUG: JVM Mechanics
 
Hibernate Import.Sql I18n
Hibernate Import.Sql I18nHibernate Import.Sql I18n
Hibernate Import.Sql I18n
 
devday2012
devday2012devday2012
devday2012
 
Everything you wanted to know about Stack Traces and Heap Dumps
Everything you wanted to know about Stack Traces and Heap DumpsEverything you wanted to know about Stack Traces and Heap Dumps
Everything you wanted to know about Stack Traces and Heap Dumps
 
The Art of JVM Profiling
The Art of JVM ProfilingThe Art of JVM Profiling
The Art of JVM Profiling
 
Behind modern concurrency primitives
Behind modern concurrency primitivesBehind modern concurrency primitives
Behind modern concurrency primitives
 
FreeRTOS Xilinx Vivado: Hello World!
FreeRTOS Xilinx Vivado: Hello World!FreeRTOS Xilinx Vivado: Hello World!
FreeRTOS Xilinx Vivado: Hello World!
 
Dynamo: Not Just For Datastores
Dynamo: Not Just For DatastoresDynamo: Not Just For Datastores
Dynamo: Not Just For Datastores
 
Node.js Event Loop & EventEmitter
Node.js Event Loop & EventEmitterNode.js Event Loop & EventEmitter
Node.js Event Loop & EventEmitter
 
Jenkins 2を使った究極のpipeline ~ 明日もう一度来てください、本物のpipelineをお見せしますよ ~
Jenkins 2を使った究極のpipeline ~ 明日もう一度来てください、本物のpipelineをお見せしますよ ~Jenkins 2を使った究極のpipeline ~ 明日もう一度来てください、本物のpipelineをお見せしますよ ~
Jenkins 2を使った究極のpipeline ~ 明日もう一度来てください、本物のpipelineをお見せしますよ ~
 
Is your profiler speaking the same language as you? -- Docklands JUG
Is your profiler speaking the same language as you? -- Docklands JUGIs your profiler speaking the same language as you? -- Docklands JUG
Is your profiler speaking the same language as you? -- Docklands JUG
 
How NOT to write in Node.js
How NOT to write in Node.jsHow NOT to write in Node.js
How NOT to write in Node.js
 
Java9を迎えた今こそ!Java本格(再)入門
Java9を迎えた今こそ!Java本格(再)入門Java9を迎えた今こそ!Java本格(再)入門
Java9を迎えた今こそ!Java本格(再)入門
 
Ricon/West 2013: Adventures with Riak Pipe
Ricon/West 2013: Adventures with Riak PipeRicon/West 2013: Adventures with Riak Pipe
Ricon/West 2013: Adventures with Riak Pipe
 
Akka.NET streams and reactive streams
Akka.NET streams and reactive streamsAkka.NET streams and reactive streams
Akka.NET streams and reactive streams
 
Vert.X: Microservices Were Never So Easy (Clement Escoffier)
Vert.X: Microservices Were Never So Easy (Clement Escoffier)Vert.X: Microservices Were Never So Easy (Clement Escoffier)
Vert.X: Microservices Were Never So Easy (Clement Escoffier)
 

En vedette

En vedette (6)

Atomics, CAS and Nonblocking algorithms
Atomics, CAS and Nonblocking algorithmsAtomics, CAS and Nonblocking algorithms
Atomics, CAS and Nonblocking algorithms
 
мифы о спарке
мифы о спарке мифы о спарке
мифы о спарке
 
Search and analyze your data with elasticsearch
Search and analyze your data with elasticsearchSearch and analyze your data with elasticsearch
Search and analyze your data with elasticsearch
 
Angular2 Development for Java developers
Angular2 Development for Java developersAngular2 Development for Java developers
Angular2 Development for Java developers
 
Hibernate, how the magic is really done
Hibernate, how the magic is really doneHibernate, how the magic is really done
Hibernate, how the magic is really done
 
JEEConf 2016. Effectiveness and code optimization in Java applications
JEEConf 2016. Effectiveness and code optimization in  Java applicationsJEEConf 2016. Effectiveness and code optimization in  Java applications
JEEConf 2016. Effectiveness and code optimization in Java applications
 

Similaire à Counter Wars (JEEConf 2016)

Jdk 7 4-forkjoin
Jdk 7 4-forkjoinJdk 7 4-forkjoin
Jdk 7 4-forkjoin
knight1128
 
JavaOne 2012 - JVM JIT for Dummies
JavaOne 2012 - JVM JIT for DummiesJavaOne 2012 - JVM JIT for Dummies
JavaOne 2012 - JVM JIT for Dummies
Charles Nutter
 
Java 5 6 Generics, Concurrency, Garbage Collection, Tuning
Java 5 6 Generics, Concurrency, Garbage Collection, TuningJava 5 6 Generics, Concurrency, Garbage Collection, Tuning
Java 5 6 Generics, Concurrency, Garbage Collection, Tuning
Carol McDonald
 

Similaire à Counter Wars (JEEConf 2016) (20)

Locks? We Don't Need No Stinkin' Locks - Michael Barker
Locks? We Don't Need No Stinkin' Locks - Michael BarkerLocks? We Don't Need No Stinkin' Locks - Michael Barker
Locks? We Don't Need No Stinkin' Locks - Michael Barker
 
Non-blocking synchronization — what is it and why we (don't?) need it
Non-blocking synchronization — what is it and why we (don't?) need itNon-blocking synchronization — what is it and why we (don't?) need it
Non-blocking synchronization — what is it and why we (don't?) need it
 
Jdk 7 4-forkjoin
Jdk 7 4-forkjoinJdk 7 4-forkjoin
Jdk 7 4-forkjoin
 
00_Introduction to Java.ppt
00_Introduction to Java.ppt00_Introduction to Java.ppt
00_Introduction to Java.ppt
 
Processing large-scale graphs with Google(TM) Pregel by MICHAEL HACKSTEIN at...
 Processing large-scale graphs with Google(TM) Pregel by MICHAEL HACKSTEIN at... Processing large-scale graphs with Google(TM) Pregel by MICHAEL HACKSTEIN at...
Processing large-scale graphs with Google(TM) Pregel by MICHAEL HACKSTEIN at...
 
JVM Mechanics: When Does the JVM JIT & Deoptimize?
JVM Mechanics: When Does the JVM JIT & Deoptimize?JVM Mechanics: When Does the JVM JIT & Deoptimize?
JVM Mechanics: When Does the JVM JIT & Deoptimize?
 
Scala to assembly
Scala to assemblyScala to assembly
Scala to assembly
 
Analysis of Haiku Operating System (BeOS Family) by PVS-Studio. Part 2
Analysis of Haiku Operating System (BeOS Family) by PVS-Studio. Part 2Analysis of Haiku Operating System (BeOS Family) by PVS-Studio. Part 2
Analysis of Haiku Operating System (BeOS Family) by PVS-Studio. Part 2
 
[245] presto 내부구조 파헤치기
[245] presto 내부구조 파헤치기[245] presto 내부구조 파헤치기
[245] presto 내부구조 파헤치기
 
Checking the Cross-Platform Framework Cocos2d-x
Checking the Cross-Platform Framework Cocos2d-xChecking the Cross-Platform Framework Cocos2d-x
Checking the Cross-Platform Framework Cocos2d-x
 
VLSI lab manual
VLSI lab manualVLSI lab manual
VLSI lab manual
 
Presto anatomy
Presto anatomyPresto anatomy
Presto anatomy
 
JavaOne 2012 - JVM JIT for Dummies
JavaOne 2012 - JVM JIT for DummiesJavaOne 2012 - JVM JIT for Dummies
JavaOne 2012 - JVM JIT for Dummies
 
Lambdas puzzler - Peter Lawrey
Lambdas puzzler - Peter LawreyLambdas puzzler - Peter Lawrey
Lambdas puzzler - Peter Lawrey
 
Java Concurrency
Java ConcurrencyJava Concurrency
Java Concurrency
 
Java Performance Puzzlers
Java Performance PuzzlersJava Performance Puzzlers
Java Performance Puzzlers
 
Java 7 Whats New(), Whats Next() from Oredev
Java 7 Whats New(), Whats Next() from OredevJava 7 Whats New(), Whats Next() from Oredev
Java 7 Whats New(), Whats Next() from Oredev
 
Java 5 6 Generics, Concurrency, Garbage Collection, Tuning
Java 5 6 Generics, Concurrency, Garbage Collection, TuningJava 5 6 Generics, Concurrency, Garbage Collection, Tuning
Java 5 6 Generics, Concurrency, Garbage Collection, Tuning
 
What is new in java 8 concurrency
What is new in java 8 concurrencyWhat is new in java 8 concurrency
What is new in java 8 concurrency
 
XebiCon'16 : Server-Side Swift. Par Simone Civetta, Développeur iOS chez Xebia
XebiCon'16 : Server-Side Swift. Par Simone Civetta, Développeur iOS chez XebiaXebiCon'16 : Server-Side Swift. Par Simone Civetta, Développeur iOS chez Xebia
XebiCon'16 : Server-Side Swift. Par Simone Civetta, Développeur iOS chez Xebia
 

Plus de Alexey Fyodorov

Java: how to thrive in the changing world
Java: how to thrive in the changing worldJava: how to thrive in the changing world
Java: how to thrive in the changing world
Alexey Fyodorov
 

Plus de Alexey Fyodorov (12)

How threads help each other
How threads help each otherHow threads help each other
How threads help each other
 
Помоги ближнему, или Как потоки помогают друг другу
Помоги ближнему, или Как потоки помогают друг другуПомоги ближнему, или Как потоки помогают друг другу
Помоги ближнему, или Как потоки помогают друг другу
 
Синхронизация без блокировок и СМС
Синхронизация без блокировок и СМССинхронизация без блокировок и СМС
Синхронизация без блокировок и СМС
 
Unsafe: to be or to be removed?
Unsafe: to be or to be removed?Unsafe: to be or to be removed?
Unsafe: to be or to be removed?
 
Общество Мертвых Потоков
Общество Мертвых ПотоковОбщество Мертвых Потоков
Общество Мертвых Потоков
 
JDK: CPU, PSU, LU, FR — WTF?!
JDK: CPU, PSU, LU, FR — WTF?!JDK: CPU, PSU, LU, FR — WTF?!
JDK: CPU, PSU, LU, FR — WTF?!
 
Philosophers
PhilosophersPhilosophers
Philosophers
 
Java in Motion
Java in MotionJava in Motion
Java in Motion
 
Java Platform Tradeoffs (Riga 2013)
Java Platform Tradeoffs (Riga 2013)Java Platform Tradeoffs (Riga 2013)
Java Platform Tradeoffs (Riga 2013)
 
Java Platform Tradeoffs (CEE SECR 2013)
Java Platform Tradeoffs (CEE SECR 2013)Java Platform Tradeoffs (CEE SECR 2013)
Java Platform Tradeoffs (CEE SECR 2013)
 
Процесс изменения платформы Java
Процесс изменения платформы JavaПроцесс изменения платформы Java
Процесс изменения платформы Java
 
Java: how to thrive in the changing world
Java: how to thrive in the changing worldJava: how to thrive in the changing world
Java: how to thrive in the changing world
 

Dernier

Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar ≼🔝 Delhi door step de...
Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar  ≼🔝 Delhi door step de...Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar  ≼🔝 Delhi door step de...
Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar ≼🔝 Delhi door step de...
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...
Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...
Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...
Dr.Costas Sachpazis
 

Dernier (20)

data_management_and _data_science_cheat_sheet.pdf
data_management_and _data_science_cheat_sheet.pdfdata_management_and _data_science_cheat_sheet.pdf
data_management_and _data_science_cheat_sheet.pdf
 
Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar ≼🔝 Delhi door step de...
Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar  ≼🔝 Delhi door step de...Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar  ≼🔝 Delhi door step de...
Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar ≼🔝 Delhi door step de...
 
UNIT-IFLUID PROPERTIES & FLOW CHARACTERISTICS
UNIT-IFLUID PROPERTIES & FLOW CHARACTERISTICSUNIT-IFLUID PROPERTIES & FLOW CHARACTERISTICS
UNIT-IFLUID PROPERTIES & FLOW CHARACTERISTICS
 
Extrusion Processes and Their Limitations
Extrusion Processes and Their LimitationsExtrusion Processes and Their Limitations
Extrusion Processes and Their Limitations
 
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
 
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptx
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptxBSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptx
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptx
 
UNIT-II FMM-Flow Through Circular Conduits
UNIT-II FMM-Flow Through Circular ConduitsUNIT-II FMM-Flow Through Circular Conduits
UNIT-II FMM-Flow Through Circular Conduits
 
Call Girls Walvekar Nagar Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Walvekar Nagar Call Me 7737669865 Budget Friendly No Advance BookingCall Girls Walvekar Nagar Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Walvekar Nagar Call Me 7737669865 Budget Friendly No Advance Booking
 
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
 
University management System project report..pdf
University management System project report..pdfUniversity management System project report..pdf
University management System project report..pdf
 
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
 
Double rodded leveling 1 pdf activity 01
Double rodded leveling 1 pdf activity 01Double rodded leveling 1 pdf activity 01
Double rodded leveling 1 pdf activity 01
 
UNIT-III FMM. DIMENSIONAL ANALYSIS
UNIT-III FMM.        DIMENSIONAL ANALYSISUNIT-III FMM.        DIMENSIONAL ANALYSIS
UNIT-III FMM. DIMENSIONAL ANALYSIS
 
Roadmap to Membership of RICS - Pathways and Routes
Roadmap to Membership of RICS - Pathways and RoutesRoadmap to Membership of RICS - Pathways and Routes
Roadmap to Membership of RICS - Pathways and Routes
 
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete RecordCCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
 
ONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdf
ONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdfONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdf
ONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdf
 
Glass Ceramics: Processing and Properties
Glass Ceramics: Processing and PropertiesGlass Ceramics: Processing and Properties
Glass Ceramics: Processing and Properties
 
Thermal Engineering-R & A / C - unit - V
Thermal Engineering-R & A / C - unit - VThermal Engineering-R & A / C - unit - V
Thermal Engineering-R & A / C - unit - V
 
chapter 5.pptx: drainage and irrigation engineering
chapter 5.pptx: drainage and irrigation engineeringchapter 5.pptx: drainage and irrigation engineering
chapter 5.pptx: drainage and irrigation engineering
 
Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...
Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...
Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...
 

Counter Wars (JEEConf 2016)