SlideShare ist ein Scribd-Unternehmen logo
1 von 73
Downloaden Sie, um offline zu lesen
@jpbempel#LockFree
Lock-Free programming: Pro tips
Jean-Philippe Bempel
Performance architect
@jpbempel
http:/jpbempel.blogspot.com
jpbempel@ullink.com
@jpbempel#LockFree
● Measuring Contention
● Compare-And-Swap
● Introduction to Java Memory Model
● Disruptor & RingBuffer
● Ticketing: OrderedScheduler
Agenda
@jpbempel#LockFree
Immutability
@jpbempel#LockFree
Contention
@jpbempel#LockFree
● Two or more threads competing
to acquire a lock
● Thread parked when waiting for
a lock
● Number one reason we want to
avoid locks
Contention
@jpbempel#LockFree
Measure, don’t guess!Kirk Pepperdine & Jack Shirazi
@jpbempel#LockFree
Measure, don’t premature!
@jpbempel#LockFree
Synchronized blocks:
● Profilers (YourKit, JProfiler, ZVision)
● JVMTI native agent
● Results may be difficult to exploit
Measuring contention
@jpbempel#LockFree
Measuring contention: JProfiler
@jpbempel#LockFree
Measuring contention: ZVision
@jpbempel#LockFree
java.util.concurrent.Lock:
● JVM cannot help us here
● JDK classes (lib), regular code
● JProfiler can measure them
● j.u.c classes modification + bootclasspath (jucprofiler)
Measuring contention
@jpbempel#LockFree
Measuring contention: JProfiler
@jpbempel#LockFree
● Insertion of contention counters
● Identify place where lock fails to be acquired
● increment counter
● Identify Locks
● Call stacks at construction
● Logging counter status
● How to measure existing locks in your code
● Modify JDK Classes
● Reintroduce in bootclasspath
Measuring contention
@jpbempel#LockFree
Compare-And-Swap
@jpbempel#LockFree
● Basic primitive for any lock-free algorithms
● Used to implement any locks or synchronization
primitives
● Handled directly by the CPU (instructions)
Compare-And-Swap
@jpbempel#LockFree
● Update atomically a memory location by another value
if the previous value is the expected one
● instruction with 3 arguments
● memory address (rbx)
● expected value (rax)
● new value (rcx)
movabs rax,0x2a
movabs rcx,0x2b
lock cmpxchg QWORD PTR [rbx],rcx
Compare-And-Swap
@jpbempel#LockFree
Compare-And-Swap
@jpbempel#LockFree
● In Java for AtomicXXX classes:
boolean compareAndSet(long expect, long update)
● Memory address is the internal value field of the class
Compare-And-Swap
@jpbempel#LockFree
Atomic increment with CAS
[JDK7] getAndIncrement():
while (true) {
long current = get();
long next = current + 1;
if (compareAndSet(current, next))
return current;
}
[JDK8] getAndIncrement():
return unsafe.getAndAddLong(this, valueOffset, 1L);
Intrinsified to:
movabs rsi,0x1
lock xadd QWORD PTR [rdx+0x10],rsi
Compare-And-Swap
@jpbempel#LockFree
ReentrantLock is implemented with a CAS:
volatile int state;
lock()
compareAndSet(0, 1);
if CAS fails => lock already acquired
unlock()
setState(0)
Compare-And-Swap
@jpbempel#LockFree
● Simplest lock-free algorithm
● Use CAS to update the next pointer into linked list
● if CAS fails, means concurrent update happened
● Read new value, go to next item and retry CAS
ConcurrentLinkedQueue
@jpbempel#LockFree
ConcurrentLinkedQueue
@jpbempel#LockFree
ConcurrentLinkedQueue
@jpbempel#LockFree
ConcurrentLinkedQueue
@jpbempel#LockFree
ConcurrentLinkedQueue
@jpbempel#LockFree
Java Memory Model
(Introduction)
@jpbempel#LockFree
● First language having a well defined memory model:
Java (1995)
● C++ get a standard Memory Model in 2011 (C++11)
● Major issues fixed in JDK 5 (2004) with JSR 133
● Before that, some constructions may have some issues
because of JIT optimizations (Double Check Locking)
Memory Model
@jpbempel#LockFree
Memory ordering
int a;
int b;
boolean enabled;
{ {
a = 21; enabled = true;
b = a * 2; a = 21;
enabled = true; b = a * 2;
} }
JIT Compiler
@jpbempel#LockFree
Memory ordering
int a;
int b;
boolean enabled;
Thread 1 Thread 2
{ {
a = 21; if (enabled)
b = a * 2; {
enabled = true; int answer = b;
} process(answer);
}
}
@jpbempel#LockFree
Memory ordering
int a;
int b;
volatile boolean enabled;
Thread 1 Thread 2
{ {
a = 21; if (enabled)
b = a * 2; {
enabled = true; int answer = b;
} process(answer);
}
}
@jpbempel#LockFree
Memory ordering
@jpbempel#LockFree
● Can be at 2 levels: Compiler & Hardware
● Depending on the CPU architecture, barrier is not
required
● on x86: strong model, limited reordering
Memory barriers
@jpbempel#LockFree
Memory barriers
@jpbempel#LockFree
● volatile field implies memory barrier
● Compiler barrier: prevent reordering
● Hardware barrier: Ensure drain of the memory buffers
● on x86, only volatile write emits an hardware barrier
lock add DWORD PTR [rsp],0x0
Memory barriers: volatile
@jpbempel#LockFree
● CAS is also a memory barrier
● Compiler: recognized by the JIT to prevent reordering
● Hardware: all lock instructions are memory barriers
Memory barriers: CAS
@jpbempel#LockFree
● method from AtomicXXX classes
● Compiler only memory barrier
● Does not emit hardware store barrier
● Still guarantees non reordering (most important) but
not immediate effect for other threads
Memory barriers: lazySet
@jpbempel#LockFree
Disruptor &
Ring Buffer
@jpbempel#LockFree
● LMAX library (incl. Martin Thompson)
● Not a new idea, circula buffers in Linux Kernel,
Lamport
● Ported to Java
Disruptor
@jpbempel#LockFree
Why not using CLQ which is lock(wait)-free?
● Queue unbounded and non blocking
● Allocates a node at each insertion
● Not CPU cache friendly
● MultiProducer and MultiConsumer
Array/LinkedBlockingQueue: not lock-free
Disruptor
@jpbempel#LockFree
Ring Buffer: 1P 1C
@jpbempel#LockFree
Ring Buffer: 1P 1C
@jpbempel#LockFree
Ring Buffer: 1P 1C
@jpbempel#LockFree
Ring Buffer: 1P 1C
Object[] ringBuffer;
volatile int head;
volatile int tail;
public boolean offer(E e) {
if (tail - head == ringBuffer.length)
return false;
ringBuffer[tail % ringBuffer.length] = e;
tail++; // volatile write
return true;
}
@jpbempel#LockFree
Ring Buffer: 1P 1C
public E poll() {
if (tail == head)
return null;
int idx = head % ringBuffer.length
E element = ringBuffer[idx];
ringBuffer[idx] = null;
head++; // volatile write
return element;
}
@jpbempel#LockFree
Ring Buffer: nP 1C
@jpbempel#LockFree
Ring Buffer: nP 1C
@jpbempel#LockFree
Ring Buffer: nP 1C
@jpbempel#LockFree
Ring Buffer: nP 1C
@jpbempel#LockFree
Ring Buffer: nP 1C
AtomicReferenceArray ringBuffer;
volatile long head;
AtomicLong tail;
@jpbempel#LockFree
Ring Buffer: nP 1C
public boolean offer(E e) {
long curTail;
do {
curTail = tail.get();
if (curTail - head == ringBuffer.length())
return false;
} while (!tail.compareAndSet(curTail, curTail+1));
int idx = curTail % ringBuffer.length();
ringBuffer.set(idx, e); // volatile write
return true;
}
@jpbempel#LockFree
Ring Buffer: nP 1C
public E poll() {
int index = head % ringBuffer.length();
E element = ringBuffer.get(index);
if (element == null)
return null;
ringBuffer.set(index, null);
head++; // volatile write
return element;
}
@jpbempel#LockFree
● Very flexible for different usage (strategies)
● Very good performance
● Data transfer from one thread to another (Queue)
Disruptor
@jpbempel#LockFree
Ticketing:
OrderedScheduler
@jpbempel#LockFree
How to parallelize tasks while keeping ordering?
Example: video stream processing
● read frame from the stream
● processing of the frame (parallelizable)
● writing into the output (in order)
Ticketing
@jpbempel#LockFree
Ticketing
@jpbempel#LockFree
Ticketing
@jpbempel#LockFree
Can do this with Disruptor, but with a consumer thread
OrderedScheduler can do the same but
● no inter-thread communication
● no additional thread
● no wait strategy
Take a ticket...
Ticketing
@jpbempel#LockFree
OrderedScheduler
@jpbempel#LockFree
OrderedScheduler
@jpbempel#LockFree
OrderedScheduler
@jpbempel#LockFree
OrderedScheduler
@jpbempel#LockFree
OrderedScheduler
@jpbempel#LockFree
OrderedScheduler
@jpbempel#LockFree
OrderedScheduler
@jpbempel#LockFree
OrderedScheduler
public void execute() {
synchronized (this) {
FooInput input = read();
BarOutput output = process(input);
write(output);
}
}
@jpbempel#LockFree
OrderedScheduler
OrderedScheduler scheduler = new OrderedScheduler();
public void execute() {
FooInput input;
long ticket;
synchronized (this) {
input = read();
ticket = scheduler.getNextTicket();
}
[...]
@jpbempel#LockFree
OrderedScheduler
public void execute(){
[...]
BarOutput output;
try {
output = process(intput);
}
catch (Exception ex) {
scheduler.trash(ticket);
throw new RuntimeException(ex);
}
scheduler.run(ticket, { () => write(output); });
}
@jpbempel#LockFree
● Open Sourced on GitHub
● PR & discussion about the design
● Used internally
OrderedScheduler
@jpbempel#LockFree
● Measure
● CAS
● Barriers
● RingBuffer
● Ordered
Takeaways
@jpbempel#LockFree
● jucProfiler: http://www.infoq.com/articles/jucprofiler
● Java Memory Model Pragmatics:
http://shipilev.net/blog/2014/jmm-pragmatics/
● Memory Barriers and JVM Concurrency:
http://www.infoq.com/articles/memory_barriers_jvm_concurrency
● JSR 133 (FAQ):
http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html
● CPU cache flushing fallacy:
http://mechanical-sympathy.blogspot.fr/2013/02/cpu-cache-flushing-fallacy.
html
● atomic<> Weapons:
http://channel9.msdn.com/Shows/Going+Deep/Cpp-and-Beyond-2012-Herb-Su
tter-atomic-Weapons-1-of-2
References
@jpbempel#LockFree
● circular buffers: http://lwn.net/Articles/378262/
● Mr T queues:
https://github.com/mjpt777/examples/tree/master/src/java/uk/co/real_lo
gic/queues
● Lock-free algorithms by Mr T:
http://www.infoq.com/presentations/Lock-free-Algorithms
● Futex are tricky U. Drepper: http://www.akkadia.org/drepper/futex.pdf
● JCTools: https://github.com/JCTools/JCTools
● Nitsan Wakart blog: http://psy-lob-saw.blogspot.com
References
@jpbempel#LockFree
● Exploiting data parallelism in ordered data streams:
https://software.intel.com/en-us/articles/exploiting-data-parallelism-in-ord
ered-data-streams
● OrderedScheduler: https://github.com/Ullink/ordered-scheduler
● Concurrency Freaks: http://concurrencyfreaks.blogspot.com
● Preshing on programming: http://preshing.com/
● Is Parallel Programming Hard, And If So, What Can You Do About It?
https://kernel.org/pub/linux/kernel/people/paulmck/perfbook/perfbook.201
5.01.31a.pdf
References
@YourTwitterHandle#DVXFR14{session hashtag} @jpbempel#LockFree
Q
&
A
Jean-Philippe Bempel
Performance architect
@jpbempel
http:/jpbempel.blogspot.com
jpbempel@ullink.com
https://wall-simple.sli.do/#/event/cmnxxfl0/section/18343/questions

Weitere ähnliche Inhalte

Was ist angesagt?

UVM Update: Register Package
UVM Update: Register PackageUVM Update: Register Package
UVM Update: Register Package
DVClub
 
Chapter 6 - Process Synchronization
Chapter 6 - Process SynchronizationChapter 6 - Process Synchronization
Chapter 6 - Process Synchronization
Wayne Jones Jnr
 
Understanding Android Benchmarks
Understanding Android BenchmarksUnderstanding Android Benchmarks
Understanding Android Benchmarks
Koan-Sin Tan
 

Was ist angesagt? (20)

Intrinsic Methods in HotSpot VM
Intrinsic Methods in HotSpot VMIntrinsic Methods in HotSpot VM
Intrinsic Methods in HotSpot VM
 
FreeRTOS basics (Real time Operating System)
FreeRTOS basics (Real time Operating System)FreeRTOS basics (Real time Operating System)
FreeRTOS basics (Real time Operating System)
 
The Java memory model made easy
The Java memory model made easyThe Java memory model made easy
The Java memory model made easy
 
UVM Update: Register Package
UVM Update: Register PackageUVM Update: Register Package
UVM Update: Register Package
 
Java under the hood
Java under the hoodJava under the hood
Java under the hood
 
Chapter 6 - Process Synchronization
Chapter 6 - Process SynchronizationChapter 6 - Process Synchronization
Chapter 6 - Process Synchronization
 
john-devkit: 100 типов хешей спустя / john-devkit: 100 Hash Types Later
john-devkit: 100 типов хешей спустя / john-devkit: 100 Hash Types Laterjohn-devkit: 100 типов хешей спустя / john-devkit: 100 Hash Types Later
john-devkit: 100 типов хешей спустя / john-devkit: 100 Hash Types Later
 
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?
 
Synchronization problem with threads
Synchronization problem with threadsSynchronization problem with threads
Synchronization problem with threads
 
Loom and concurrency latest
Loom and concurrency latestLoom and concurrency latest
Loom and concurrency latest
 
Java Performance Tuning
Java Performance TuningJava Performance Tuning
Java Performance Tuning
 
Why GC is eating all my CPU?
Why GC is eating all my CPU?Why GC is eating all my CPU?
Why GC is eating all my CPU?
 
Erlang For Five Nines
Erlang For Five NinesErlang For Five Nines
Erlang For Five Nines
 
Operating System-Ch6 process synchronization
Operating System-Ch6 process synchronizationOperating System-Ch6 process synchronization
Operating System-Ch6 process synchronization
 
PHP 7X New Features
PHP 7X New FeaturesPHP 7X New Features
PHP 7X New Features
 
Understanding Android Benchmarks
Understanding Android BenchmarksUnderstanding Android Benchmarks
Understanding Android Benchmarks
 
Software Profiling: Java Performance, Profiling and Flamegraphs
Software Profiling: Java Performance, Profiling and FlamegraphsSoftware Profiling: Java Performance, Profiling and Flamegraphs
Software Profiling: Java Performance, Profiling and Flamegraphs
 
What's new in Java 11
What's new in Java 11What's new in Java 11
What's new in Java 11
 
OSCh7
OSCh7OSCh7
OSCh7
 
Hybrid STM/HTM for Nested Transactions on OpenJDK
Hybrid STM/HTM for Nested Transactions on OpenJDKHybrid STM/HTM for Nested Transactions on OpenJDK
Hybrid STM/HTM for Nested Transactions on OpenJDK
 

Andere mochten auch (7)

Lock free programming- pro tips
Lock free programming- pro tipsLock free programming- pro tips
Lock free programming- pro tips
 
Memory model
Memory modelMemory model
Memory model
 
Unit II - 3 - Operating System - Process Synchronization
Unit II - 3 - Operating System - Process SynchronizationUnit II - 3 - Operating System - Process Synchronization
Unit II - 3 - Operating System - Process Synchronization
 
Database ,11 Concurrency Control
Database ,11 Concurrency ControlDatabase ,11 Concurrency Control
Database ,11 Concurrency Control
 
Android Audio & OpenSL
Android Audio & OpenSLAndroid Audio & OpenSL
Android Audio & OpenSL
 
Android audio system(audioflinger)
Android audio system(audioflinger)Android audio system(audioflinger)
Android audio system(audioflinger)
 
Interpreter, Compiler, JIT from scratch
Interpreter, Compiler, JIT from scratchInterpreter, Compiler, JIT from scratch
Interpreter, Compiler, JIT from scratch
 

Ähnlich wie Lock free programming - pro tips devoxx uk

Programming with Threads in Java
Programming with Threads in JavaProgramming with Threads in Java
Programming with Threads in Java
koji lin
 
Simplifying training deep and serving learning models with big data in python...
Simplifying training deep and serving learning models with big data in python...Simplifying training deep and serving learning models with big data in python...
Simplifying training deep and serving learning models with big data in python...
Holden Karau
 
ARB_gl_spirv implementation in Mesa: status update (XDC 2018)
ARB_gl_spirv implementation in Mesa: status update (XDC 2018)ARB_gl_spirv implementation in Mesa: status update (XDC 2018)
ARB_gl_spirv implementation in Mesa: status update (XDC 2018)
Igalia
 
Database & Technology 1 _ Tom Kyte _ Efficient PL SQL - Why and How to Use.pdf
Database & Technology 1 _ Tom Kyte _ Efficient PL SQL - Why and How to Use.pdfDatabase & Technology 1 _ Tom Kyte _ Efficient PL SQL - Why and How to Use.pdf
Database & Technology 1 _ Tom Kyte _ Efficient PL SQL - Why and How to Use.pdf
InSync2011
 

Ähnlich wie Lock free programming - pro tips devoxx uk (20)

Performance optimization techniques for Java code
Performance optimization techniques for Java codePerformance optimization techniques for Java code
Performance optimization techniques for Java code
 
Non blocking programming and waiting
Non blocking programming and waitingNon blocking programming and waiting
Non blocking programming and waiting
 
Programming with Threads in Java
Programming with Threads in JavaProgramming with Threads in Java
Programming with Threads in Java
 
Simplifying training deep and serving learning models with big data in python...
Simplifying training deep and serving learning models with big data in python...Simplifying training deep and serving learning models with big data in python...
Simplifying training deep and serving learning models with big data in python...
 
MOVED: The challenge of SVE in QEMU - SFO17-103
MOVED: The challenge of SVE in QEMU - SFO17-103MOVED: The challenge of SVE in QEMU - SFO17-103
MOVED: The challenge of SVE in QEMU - SFO17-103
 
Distributed implementation of a lstm on spark and tensorflow
Distributed implementation of a lstm on spark and tensorflowDistributed implementation of a lstm on spark and tensorflow
Distributed implementation of a lstm on spark and tensorflow
 
Threads
ThreadsThreads
Threads
 
Powering Tensorflow with big data using Apache Beam, Flink, and Spark - OSCON...
Powering Tensorflow with big data using Apache Beam, Flink, and Spark - OSCON...Powering Tensorflow with big data using Apache Beam, Flink, and Spark - OSCON...
Powering Tensorflow with big data using Apache Beam, Flink, and Spark - OSCON...
 
Plpgsql russia-pgconf
Plpgsql russia-pgconfPlpgsql russia-pgconf
Plpgsql russia-pgconf
 
OpenLineage for Stream Processing | Kafka Summit London
OpenLineage for Stream Processing | Kafka Summit LondonOpenLineage for Stream Processing | Kafka Summit London
OpenLineage for Stream Processing | Kafka Summit London
 
High performance json- postgre sql vs. mongodb
High performance json- postgre sql vs. mongodbHigh performance json- postgre sql vs. mongodb
High performance json- postgre sql vs. mongodb
 
ARB_gl_spirv implementation in Mesa: status update (XDC 2018)
ARB_gl_spirv implementation in Mesa: status update (XDC 2018)ARB_gl_spirv implementation in Mesa: status update (XDC 2018)
ARB_gl_spirv implementation in Mesa: status update (XDC 2018)
 
Using FXML on Clojure
Using FXML on ClojureUsing FXML on Clojure
Using FXML on Clojure
 
Fields in Java and Kotlin and what to expect.pptx
Fields in Java and Kotlin and what to expect.pptxFields in Java and Kotlin and what to expect.pptx
Fields in Java and Kotlin and what to expect.pptx
 
Unit testing legacy code
Unit testing legacy codeUnit testing legacy code
Unit testing legacy code
 
PostgreSQL Sharding and HA: Theory and Practice (PGConf.ASIA 2017)
PostgreSQL Sharding and HA: Theory and Practice (PGConf.ASIA 2017)PostgreSQL Sharding and HA: Theory and Practice (PGConf.ASIA 2017)
PostgreSQL Sharding and HA: Theory and Practice (PGConf.ASIA 2017)
 
Play Framework
Play FrameworkPlay Framework
Play Framework
 
Spock pres
Spock presSpock pres
Spock pres
 
Determinism in finance
Determinism in financeDeterminism in finance
Determinism in finance
 
Database & Technology 1 _ Tom Kyte _ Efficient PL SQL - Why and How to Use.pdf
Database & Technology 1 _ Tom Kyte _ Efficient PL SQL - Why and How to Use.pdfDatabase & Technology 1 _ Tom Kyte _ Efficient PL SQL - Why and How to Use.pdf
Database & Technology 1 _ Tom Kyte _ Efficient PL SQL - Why and How to Use.pdf
 

Mehr von Jean-Philippe BEMPEL

Low latency & mechanical sympathy issues and solutions
Low latency & mechanical sympathy  issues and solutionsLow latency & mechanical sympathy  issues and solutions
Low latency & mechanical sympathy issues and solutions
Jean-Philippe BEMPEL
 

Mehr von Jean-Philippe BEMPEL (17)

Mastering GC.pdf
Mastering GC.pdfMastering GC.pdf
Mastering GC.pdf
 
Javaday 2022 - Remèdes aux oomkill, warm-ups, et lenteurs pour des conteneur...
Javaday 2022 - Remèdes aux oomkill, warm-ups, et lenteurs pour des conteneur...Javaday 2022 - Remèdes aux oomkill, warm-ups, et lenteurs pour des conteneur...
Javaday 2022 - Remèdes aux oomkill, warm-ups, et lenteurs pour des conteneur...
 
Devoxx Fr 2022 - Remèdes aux oomkill, warm-ups, et lenteurs pour des conteneu...
Devoxx Fr 2022 - Remèdes aux oomkill, warm-ups, et lenteurs pour des conteneu...Devoxx Fr 2022 - Remèdes aux oomkill, warm-ups, et lenteurs pour des conteneu...
Devoxx Fr 2022 - Remèdes aux oomkill, warm-ups, et lenteurs pour des conteneu...
 
Tools in action jdk mission control and flight recorder
Tools in action  jdk mission control and flight recorderTools in action  jdk mission control and flight recorder
Tools in action jdk mission control and flight recorder
 
Understanding JVM GC: advanced!
Understanding JVM GC: advanced!Understanding JVM GC: advanced!
Understanding JVM GC: advanced!
 
Understanding low latency jvm gcs V2
Understanding low latency jvm gcs V2Understanding low latency jvm gcs V2
Understanding low latency jvm gcs V2
 
Understanding low latency jvm gcs
Understanding low latency jvm gcsUnderstanding low latency jvm gcs
Understanding low latency jvm gcs
 
Understanding jvm gc advanced
Understanding jvm gc advancedUnderstanding jvm gc advanced
Understanding jvm gc advanced
 
Clr jvm implementation differences
Clr jvm implementation differencesClr jvm implementation differences
Clr jvm implementation differences
 
Le guide de dépannage de la jvm
Le guide de dépannage de la jvmLe guide de dépannage de la jvm
Le guide de dépannage de la jvm
 
Out ofmemoryerror what is the cost of java objects
Out ofmemoryerror  what is the cost of java objectsOut ofmemoryerror  what is the cost of java objects
Out ofmemoryerror what is the cost of java objects
 
OutOfMemoryError : quel est le coût des objets en java
OutOfMemoryError : quel est le coût des objets en javaOutOfMemoryError : quel est le coût des objets en java
OutOfMemoryError : quel est le coût des objets en java
 
Low latency & mechanical sympathy issues and solutions
Low latency & mechanical sympathy  issues and solutionsLow latency & mechanical sympathy  issues and solutions
Low latency & mechanical sympathy issues and solutions
 
Programmation lock free - les techniques des pros (2eme partie)
Programmation lock free - les techniques des pros (2eme partie)Programmation lock free - les techniques des pros (2eme partie)
Programmation lock free - les techniques des pros (2eme partie)
 
Programmation lock free - les techniques des pros (1ere partie)
Programmation lock free - les techniques des pros (1ere partie)Programmation lock free - les techniques des pros (1ere partie)
Programmation lock free - les techniques des pros (1ere partie)
 
Measuring directly from cpu hardware performance counters
Measuring directly from cpu  hardware performance countersMeasuring directly from cpu  hardware performance counters
Measuring directly from cpu hardware performance counters
 
Devoxx france 2014 compteurs de perf
Devoxx france 2014 compteurs de perfDevoxx france 2014 compteurs de perf
Devoxx france 2014 compteurs de perf
 

Kürzlich hochgeladen

+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 

Kürzlich hochgeladen (20)

ManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide DeckManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide Deck
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
 
Sector 18, Noida Call girls :8448380779 Model Escorts | 100% verified
Sector 18, Noida Call girls :8448380779 Model Escorts | 100% verifiedSector 18, Noida Call girls :8448380779 Model Escorts | 100% verified
Sector 18, Noida Call girls :8448380779 Model Escorts | 100% verified
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
LEVEL 5 - SESSION 1 2023 (1).pptx - PDF 123456
LEVEL 5   - SESSION 1 2023 (1).pptx - PDF 123456LEVEL 5   - SESSION 1 2023 (1).pptx - PDF 123456
LEVEL 5 - SESSION 1 2023 (1).pptx - PDF 123456
 

Lock free programming - pro tips devoxx uk