SlideShare ist ein Scribd-Unternehmen logo
1 von 167
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Andere mochten auch

Andere mochten auch (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
 

Mehr von Michael Klishin

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 codebaseMichael Klishin
 
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 itMichael Klishin
 
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 issuesMichael Klishin
 

Mehr von 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
 

Kürzlich hochgeladen

PROYECCIÓN DE VISTAS planos de vistas y mas
PROYECCIÓN DE VISTAS planos de vistas y masPROYECCIÓN DE VISTAS planos de vistas y mas
PROYECCIÓN DE VISTAS planos de vistas y maslida630411
 
TECNOLOGIA 11-4.8888888888888888888888888
TECNOLOGIA 11-4.8888888888888888888888888TECNOLOGIA 11-4.8888888888888888888888888
TECNOLOGIA 11-4.8888888888888888888888888ElianaValencia28
 
La electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfLa electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfcristianrb0324
 
Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar24roberto21
 
Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfKarinaCambero3
 
Nomisam: Base de Datos para Gestión de Nómina
Nomisam: Base de Datos para Gestión de NóminaNomisam: Base de Datos para Gestión de Nómina
Nomisam: Base de Datos para Gestión de Nóminacuellosameidy
 
Trabajo de Tecnología .pdfywhwhejsjsjsjsjsk
Trabajo de Tecnología .pdfywhwhejsjsjsjsjskTrabajo de Tecnología .pdfywhwhejsjsjsjsjsk
Trabajo de Tecnología .pdfywhwhejsjsjsjsjskbydaniela5
 
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxPLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxhasbleidit
 
Trabajo de tecnología primer periodo 2024
Trabajo de tecnología primer periodo 2024Trabajo de tecnología primer periodo 2024
Trabajo de tecnología primer periodo 2024anasofiarodriguezcru
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosAlbanyMartinez7
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersIván López Martín
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docxobandopaula444
 
tecnologiaactividad11-240323205859-a9b9b9bc.pdf
tecnologiaactividad11-240323205859-a9b9b9bc.pdftecnologiaactividad11-240323205859-a9b9b9bc.pdf
tecnologiaactividad11-240323205859-a9b9b9bc.pdflauralizcano0319
 
TENDENCIAS DE IA Inteligencia artificial generativa.pdf
TENDENCIAS DE IA Inteligencia artificial generativa.pdfTENDENCIAS DE IA Inteligencia artificial generativa.pdf
TENDENCIAS DE IA Inteligencia artificial generativa.pdfJoseAlejandroPerezBa
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1ivanapaterninar
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)JuanStevenTrujilloCh
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointValerioIvanDePazLoja
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptxHugoGutierrez99
 
Clasificación de Conjuntos de Datos Desequilibrados.pptx
Clasificación de Conjuntos de Datos Desequilibrados.pptxClasificación de Conjuntos de Datos Desequilibrados.pptx
Clasificación de Conjuntos de Datos Desequilibrados.pptxCarolina Bujaico
 

Kürzlich hochgeladen (20)

PROYECCIÓN DE VISTAS planos de vistas y mas
PROYECCIÓN DE VISTAS planos de vistas y masPROYECCIÓN DE VISTAS planos de vistas y mas
PROYECCIÓN DE VISTAS planos de vistas y mas
 
TECNOLOGIA 11-4.8888888888888888888888888
TECNOLOGIA 11-4.8888888888888888888888888TECNOLOGIA 11-4.8888888888888888888888888
TECNOLOGIA 11-4.8888888888888888888888888
 
La electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfLa electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdf
 
Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar
 
Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdf
 
Nomisam: Base de Datos para Gestión de Nómina
Nomisam: Base de Datos para Gestión de NóminaNomisam: Base de Datos para Gestión de Nómina
Nomisam: Base de Datos para Gestión de Nómina
 
Trabajo de Tecnología .pdfywhwhejsjsjsjsjsk
Trabajo de Tecnología .pdfywhwhejsjsjsjsjskTrabajo de Tecnología .pdfywhwhejsjsjsjsjsk
Trabajo de Tecnología .pdfywhwhejsjsjsjsjsk
 
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxPLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
 
Trabajo de tecnología primer periodo 2024
Trabajo de tecnología primer periodo 2024Trabajo de tecnología primer periodo 2024
Trabajo de tecnología primer periodo 2024
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos Juridicos
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 Testcontainers
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
 
tecnologiaactividad11-240323205859-a9b9b9bc.pdf
tecnologiaactividad11-240323205859-a9b9b9bc.pdftecnologiaactividad11-240323205859-a9b9b9bc.pdf
tecnologiaactividad11-240323205859-a9b9b9bc.pdf
 
TENDENCIAS DE IA Inteligencia artificial generativa.pdf
TENDENCIAS DE IA Inteligencia artificial generativa.pdfTENDENCIAS DE IA Inteligencia artificial generativa.pdf
TENDENCIAS DE IA Inteligencia artificial generativa.pdf
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power Point
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
 
Clasificación de Conjuntos de Datos Desequilibrados.pptx
Clasificación de Conjuntos de Datos Desequilibrados.pptxClasificación de Conjuntos de Datos Desequilibrados.pptx
Clasificación de Conjuntos de Datos Desequilibrados.pptx
 

50 shades of concurrency