SlideShare una empresa de Scribd logo
1 de 167
Descargar para leer sin conexión
50 Shades of
Concurrency
viernes, 27 de septiembre de 13
About me
viernes, 27 de septiembre de 13
About me
@michaelklishin
viernes, 27 de septiembre de 13
About me
viernes, 27 de septiembre de 13
About me
clojurewerkz.org
viernes, 27 de septiembre de 13
About me
Ex-Travis CI
core
viernes, 27 de septiembre de 13
About me
viernes, 27 de septiembre de 13
About me
data processing
and analytics
viernes, 27 de septiembre de 13
About me
dozen of programming
languages, <3 ƛ
viernes, 27 de septiembre de 13
About me
recognized animated
gifs expert
viernes, 27 de septiembre de 13
About this talk
viernes, 27 de septiembre de 13
About this talk
N lightning talks
combined
viernes, 27 de septiembre de 13
About this talk
Multiple related
topics
viernes, 27 de septiembre de 13
About this talk
Observations
viernes, 27 de septiembre de 13
About this talk
Rants
viernes, 27 de septiembre de 13
viernes, 27 de septiembre de 13
Do we really need
concurrency?
viernes, 27 de septiembre de 13
viernes, 27 de septiembre de 13
The shit is just too
damn hard
viernes, 27 de septiembre de 13
viernes, 27 de septiembre de 13
Do we need
concurrency?
viernes, 27 de septiembre de 13
«In 2013 alone, IP traffic is
expected to grow by around 14
exabytes per month…» — ITU
viernes, 27 de septiembre de 13
Exabyte? LOLWUT?
viernes, 27 de septiembre de 13
Exabyte
• 10^18 bytes
viernes, 27 de septiembre de 13
Exabyte
• 10^18 bytes
• 1,000 petabytes
viernes, 27 de septiembre de 13
Exabyte
• 10^18 bytes
• 1,000 petabytes
• 1,000,000,000 gigabytes
viernes, 27 de septiembre de 13
viernes, 27 de septiembre de 13
viernes, 27 de septiembre de 13
If your project is data-
driven, concurrency is no
longer a nice-to-have
viernes, 27 de septiembre de 13
Do we need
concurrency?
viernes, 27 de septiembre de 13
viernes, 27 de septiembre de 13
Timely updates from N sources
is a UI feature
viernes, 27 de septiembre de 13
Products compete on
user experience
viernes, 27 de septiembre de 13
Reasonably responsive
UI or GTFO
viernes, 27 de septiembre de 13
Do we need
concurrency?
viernes, 27 de septiembre de 13
The world around us is
concurrent
viernes, 27 de septiembre de 13
Pull iPhone headphones
jack when the track is
being switched
viernes, 27 de septiembre de 13
Why it happens?
viernes, 27 de septiembre de 13
Race condition
viernes, 27 de septiembre de 13
Race conditions,
explained
viernes, 27 de septiembre de 13
Do we need
concurrency?
viernes, 27 de septiembre de 13
Do we need to
understand
concurrency?
viernes, 27 de septiembre de 13
«my framework will
solve this problem for
me!»
viernes, 27 de septiembre de 13
viernes, 27 de septiembre de 13
require "mutex"
m = Mutex.new
m.synchronize do
m.synchronize do
# ...
end
end
viernes, 27 de septiembre de 13
viernes, 27 de septiembre de 13
ThreadError: deadlock; recursive
locking
from (irb):4:in `synchronize'
from (irb):4:in `block in
irb_binding'
from (irb):4:in `synchronize'
viernes, 27 de septiembre de 13
viernes, 27 de septiembre de 13
viernes, 27 de septiembre de 13
«Deadlock describes a
situation when one or
more threads are
blocked waiting on
each other…»
viernes, 27 de septiembre de 13
require "mutex"
m = Mutex.new
m.synchronize do
m.synchronize do
# ...
end
end
viernes, 27 de septiembre de 13
Unfortunately, Ruby standard
library has more poor design
decisions w.r.t. concurrency
viernes, 27 de septiembre de 13
Solvable?
viernes, 27 de septiembre de 13
require “monitor”
viernes, 27 de septiembre de 13
5-10% throughput
decrease
viernes, 27 de septiembre de 13
Backwards compatiblity
viernes, 27 de septiembre de 13
viernes, 27 de septiembre de 13
Mutexes, explained
viernes, 27 de septiembre de 13
Mutexes, explained
viernes, 27 de septiembre de 13
«I know, Java is
incredibly solid and
stable!»
viernes, 27 de septiembre de 13
Map<String, Integer> m =
new HashMap<>();
m.put("michael", 3);
viernes, 27 de septiembre de 13
results in…
viernes, 27 de septiembre de 13
CPU usage spikes
viernes, 27 de septiembre de 13
HashMap can create infinite
loops internally if you write to
it concurrently, and a write
causes a resize.
viernes, 27 de septiembre de 13
When I find myself in times of
trouble
Prof. Doug Lea comes to me
Coding lines of wisdom
j.u.c.
viernes, 27 de septiembre de 13
java.util.concurrent
viernes, 27 de septiembre de 13
«MyVM will solve the
problem for me!»
viernes, 27 de septiembre de 13
Very GC/allocations
heavy algorithm
implemented in Clojure
viernes, 27 de septiembre de 13
«abysmal multicore
performance, especially
on AMD processors…»
https://groups.google.com/d/topic/clojure/48W2eff3caU/discussion
viernes, 27 de septiembre de 13
~100 replies and 20
participants later…
viernes, 27 de septiembre de 13
The bottleneck is…
viernes, 27 de septiembre de 13
OpenJDK/Oracle JDK
memory allocator
viernes, 27 de septiembre de 13
LOLWUT?
viernes, 27 de septiembre de 13
«It’s C++ and a few billions of $
worth of engineering man-hours!»
viernes, 27 de septiembre de 13
Not every
algorithm has
concurrent
alternatives
viernes, 27 de septiembre de 13
Efficient, concurrent
writes is a hard
problem
viernes, 27 de septiembre de 13
Lock contention
viernes, 27 de septiembre de 13
Lock contention,
exlained
viernes, 27 de septiembre de 13
Lock contention,
exlained
viernes, 27 de septiembre de 13
Memory models
viernes, 27 de septiembre de 13
«My compiler will solve
the problem for me!»
viernes, 27 de septiembre de 13
Compilers are very sophisticated
tools and can do a lot for you.
But they still need your help from
time to time.
viernes, 27 de septiembre de 13
False sharing
viernes, 27 de septiembre de 13
viernes, 27 de septiembre de 13
viernes, 27 de septiembre de 13
False sharing
viernes, 27 de septiembre de 13
class Metrics
attr_accessor :signin_requests
attr_accessor :signout_requests
end
viernes, 27 de septiembre de 13
Thread A updates :signin_requests
viernes, 27 de septiembre de 13
Thread B updates :signout_requests
viernes, 27 de septiembre de 13
CPU caches
viernes, 27 de septiembre de 13
viernes, 27 de septiembre de 13
Memory is stored in
CPU caches in chunks
viernes, 27 de septiembre de 13
The chunks are known
as cache lines
viernes, 27 de septiembre de 13
viernes, 27 de septiembre de 13
Cache line
viernes, 27 de septiembre de 13
Cache line
Thread A
updates
viernes, 27 de septiembre de 13
Cache line
Thread B
updates
viernes, 27 de septiembre de 13
Cache line
RAM
viernes, 27 de septiembre de 13
Threads update independent variables,
but the entire cache line is
has to be read from RAM
viernes, 27 de septiembre de 13
Solvable?
viernes, 27 de septiembre de 13
public final class VolatileLong {
public volatile long value = 0L;
public long p1, p2, p3, p4, p5, p6;
}
viernes, 27 de septiembre de 13
viernes, 27 de septiembre de 13
«Threads suck! UNIX processes will
solve my problem!»
viernes, 27 de septiembre de 13
fork(2)
viernes, 27 de septiembre de 13
fork(2) vs forkall(2)
viernes, 27 de septiembre de 13
fork(2) and parent process
that holds mutex(es)
viernes, 27 de septiembre de 13
async signal safe
viernes, 27 de septiembre de 13
«The child inherits copies of the parent's set of
open file descriptors…»
viernes, 27 de septiembre de 13
«All APIs, including global data symbols, in any
framework or library should be assumed to be
unsafe after a fork() unless explicitly documented
to be safe or async-signal safe…»
viernes, 27 de septiembre de 13
man 2 fork, CAVEATS
viernes, 27 de septiembre de 13
man 2 vfork
viernes, 27 de septiembre de 13
Process race conditions
viernes, 27 de septiembre de 13
Not that many concurrency
libraries for processes
viernes, 27 de septiembre de 13
«My OS will solve the
problem for me!»
viernes, 27 de septiembre de 13
viernes, 27 de septiembre de 13
viernes, 27 de septiembre de 13
Cooperative
concurrency, explained
viernes, 27 de septiembre de 13
Cooperative
concurrency, explained
viernes, 27 de septiembre de 13
Preemptive scheduling
viernes, 27 de septiembre de 13
Scheduling
viernes, 27 de septiembre de 13
C10K
viernes, 27 de septiembre de 13
C100M
viernes, 27 de septiembre de 13
Lightweight
processes
viernes, 27 de septiembre de 13
Erlang, Clojure’s
core.async, Go
viernes, 27 de septiembre de 13
Lightweight processes:
the Holy Grail?
viernes, 27 de septiembre de 13
Dat single Erlang
process bottleneck
viernes, 27 de septiembre de 13
Unbounded mailboxes
and backpressure
viernes, 27 de septiembre de 13
Race conditions
viernes, 27 de septiembre de 13
Deadlocks in Erlang
viernes, 27 de septiembre de 13
Livelocks in Erlang
viernes, 27 de septiembre de 13
viernes, 27 de septiembre de 13
viernes, 27 de septiembre de 13
Concurrency is about
algorithms
viernes, 27 de septiembre de 13
Correctness
viernes, 27 de septiembre de 13
Race conditions are
possible with any
language
viernes, 27 de septiembre de 13
Concurrency makes it
harder to reason about
correctness
viernes, 27 de septiembre de 13
Most issues arise from
shared mutable state
viernes, 27 de septiembre de 13
Solvable?
viernes, 27 de septiembre de 13
Solutions
•Eliminate shared state
viernes, 27 de septiembre de 13
Solutions
•Eliminate shared state
•Use immutable data
structures
viernes, 27 de septiembre de 13
«Immutable? But how
do I change anything?»
viernes, 27 de septiembre de 13
Immutable data
structures create
copies when updated
(mutated)
viernes, 27 de septiembre de 13
«But copying is
expensive!»
viernes, 27 de septiembre de 13
Copying doesn’t have
to be a naïve “full copy”
viernes, 27 de septiembre de 13
Value immutability vs
reference immutability
viernes, 27 de septiembre de 13
Value immutability:
Haskell, Clojure, Erlang.
viernes, 27 de septiembre de 13
Reference immutability:
C++, Java, Scala, Rust.
viernes, 27 de septiembre de 13
Value immutability:
libraries for any
language (Ruby, Java, JS)
viernes, 27 de septiembre de 13
Immutability and
message passing
make reasoning
much easier
viernes, 27 de septiembre de 13
Summary
viernes, 27 de septiembre de 13
Concurrency is
no longer a
nice-to-have
viernes, 27 de septiembre de 13
There is no such
thing as a “thread
safe framework”
viernes, 27 de septiembre de 13
Concurrency is
about
algorithms
viernes, 27 de septiembre de 13
Algorithms are
different at
every level
viernes, 27 de septiembre de 13
Problems are
different at
every level
viernes, 27 de septiembre de 13
No substitute
for
understanding
viernes, 27 de septiembre de 13
Being able to reason
about your program
matters
viernes, 27 de septiembre de 13
Immutability and
message passing
make reasoning
much easier
viernes, 27 de septiembre de 13
Not about event
loops or Web
Scale™
viernes, 27 de septiembre de 13
Concurrency is the new
Cloud Computing
viernes, 27 de septiembre de 13
Concurrency is the new
Clown Computering
viernes, 27 de septiembre de 13
«Blah blah, X blowsY out of the
water in concurrency…»
viernes, 27 de septiembre de 13
Be specific or GTFO
viernes, 27 de septiembre de 13
Start learning a
language with
immutable data
structures today
viernes, 27 de septiembre de 13
clojure-doc.org
viernes, 27 de septiembre de 13
Thank you
viernes, 27 de septiembre de 13
@michaelklishin
clojurewerkz.org
viernes, 27 de septiembre de 13

Más contenido relacionado

Destacado

Manual microsoft-word
Manual microsoft-wordManual microsoft-word
Manual microsoft-word
itisistemasjt
 
Administracion de la informatica educativa[1] maria esther becerra leon
Administracion de la informatica educativa[1] maria esther becerra leonAdministracion de la informatica educativa[1] maria esther becerra leon
Administracion de la informatica educativa[1] maria esther becerra leon
maesbele2628
 
Federalismo a-brasileira--vol08
Federalismo a-brasileira--vol08Federalismo a-brasileira--vol08
Federalismo a-brasileira--vol08
Samuel Lima
 

Destacado (17)

Transmittance complexe - Fonction de transfert
Transmittance complexe - Fonction de transfertTransmittance complexe - Fonction de transfert
Transmittance complexe - Fonction de transfert
 
міська 2013
міська 2013міська 2013
міська 2013
 
優使性與使用者測試
優使性與使用者測試優使性與使用者測試
優使性與使用者測試
 
Qué es una red social
Qué es una red socialQué es una red social
Qué es una red social
 
Gimp2
Gimp2Gimp2
Gimp2
 
Manual microsoft-word
Manual microsoft-wordManual microsoft-word
Manual microsoft-word
 
El agua.odf
El agua.odfEl agua.odf
El agua.odf
 
Revista Hotelaria - Miguel Guedes de Sousa
Revista Hotelaria - Miguel Guedes de SousaRevista Hotelaria - Miguel Guedes de Sousa
Revista Hotelaria - Miguel Guedes de Sousa
 
Mapas Josy
Mapas JosyMapas Josy
Mapas Josy
 
Presentación1
Presentación1Presentación1
Presentación1
 
Clase 1
Clase 1Clase 1
Clase 1
 
Administracion de la informatica educativa[1] maria esther becerra leon
Administracion de la informatica educativa[1] maria esther becerra leonAdministracion de la informatica educativa[1] maria esther becerra leon
Administracion de la informatica educativa[1] maria esther becerra leon
 
Palestra o profissional é valorizado
Palestra o profissional é valorizadoPalestra o profissional é valorizado
Palestra o profissional é valorizado
 
Peditorial
PeditorialPeditorial
Peditorial
 
Federalismo a-brasileira--vol08
Federalismo a-brasileira--vol08Federalismo a-brasileira--vol08
Federalismo a-brasileira--vol08
 
El agua.odf
El agua.odfEl agua.odf
El agua.odf
 
El uso de podcast en la educación
El uso de podcast en la educaciónEl uso de podcast en la educación
El uso de podcast en la educación
 

Más de Michael Klishin

Más de Michael Klishin (7)

Adopting Elixir in a 10 year old codebase
Adopting Elixir in a 10 year old codebaseAdopting Elixir in a 10 year old codebase
Adopting Elixir in a 10 year old codebase
 
Troubleshooting RabbitMQ and services that use it
Troubleshooting RabbitMQ and services that use itTroubleshooting RabbitMQ and services that use it
Troubleshooting RabbitMQ and services that use it
 
Troubleshooting common oslo.messaging and RabbitMQ issues
Troubleshooting common oslo.messaging and RabbitMQ issuesTroubleshooting common oslo.messaging and RabbitMQ issues
Troubleshooting common oslo.messaging and RabbitMQ issues
 
RabbitMQ Operations
RabbitMQ OperationsRabbitMQ Operations
RabbitMQ Operations
 
Scalable Open Source
Scalable Open SourceScalable Open Source
Scalable Open Source
 
3 years with Clojure
3 years with Clojure3 years with Clojure
3 years with Clojure
 
Open source responsibly
Open source responsiblyOpen source responsibly
Open source responsibly
 

Último

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
241521559
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
silviayucra2
 

Último (10)

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 

50 shades of concurrency