SlideShare a Scribd company logo
1 of 93
Download to read offline
State You’re Doing it Wrong:
Alternative Concurrency
Paradigms For the JVM
Jonas Bonér
Crisp AB
blog: http://jonasboner.com
work: http://crisp.se
code: http://github.com/jboner
twitter: jboner
Agenda
> An Emergent Crisis
> State: Identity vs Value
> Shared-State Concurrency
> Software Transactional Memory (STM)
> Message-Passing Concurrency (Actors)
> Dataflow Concurrency
> Wrap up




                                         2
Moore’s Law
> Coined in the 1965 paper by Gordon E. Moore
> The number of transistors is doubling every
  18 months
> Processor manufacturers have solved our
  problems for years




                                                3
Not anymore

              4
The free lunch is over
> Theend of Moore’s Law
> We can’t squeeze more out of one CPU




                                         5
Conclusion
> This is an emergent crisis
> Multi-processors are here to stay
> We need to learn to take advantage of that
> The world is going concurrent




                                               6
State
        7
The devil is in
  the state



                  8
Wrong,
let me rephrase


                  9
The devil is in
the mutable state



                    10
Definitions
     &
Philosophy

              11
What is a Value?
A Value is something that
 does not change
       Discussion based on
       http://clojure.org/state
           by Rich Hickey



                                  12
What is an Identity?
  A stable logical entity
    associated with a
series of different Values
        over time


                             13
What is State?
   The Value
 an entity with a
 specific Identity
has at a particular
  point in time

                      14
How do we know if
    something has State?
  If a function is invoked with
     the same arguments at
two different points in time and
     returns different values...

      ...then it has state
                              15
The Problem
  Unification of
Identity & Value
    They are
      not
   the same
                   16
We need to separate Identity & Value
...add a level of indirection
Software Transactional Memory
  Managed References

Message-Passing Concurrency
  Actors/Active Objects

Dataflow Concurrency
  Dataflow (Single-Assignment) Variables
                                           17
Shared-State
Concurrency


               18
Shared-State Concurrency
> Concurrent access to shared, mutable state.
> Protect mutable state with locks
> The
   Java

   C#

   C/C++

   Ruby

   Python

   etc.

   ...way



                                                19
Shared-State Concurrency is
incredibly hard
> Inherentlyvery hard to use reliably
> Even the experts get it wrong




                                        20
Roadmap:
   Let’s look at three problem domains
1. Need for consensus and truly shared knowledge
  Example: Banking

2. Coordination of independent tasks/processes
  Example: Scheduling, Gaming

3. Workflow related dependent processes
  Example: Business processes, MapReduce




                                                 21
...and for each of these...
1. Look at an implementation using
   Shared-State Concurrency

2. Compare with implementation using an
   alternative paradigm




                                          22
Roadmap:
   Let’s look at three problem domains
1. Need for consensus and truly shared knowledge
  Example: Banking

2. Coordination of independent tasks/processes
  Example: Scheduling, Gaming

3. Workflow related dependent processes
  Example: Business processes, MapReduce




                                                 23
Problem 1:
    Transfer funds
between bank accounts


                        24
Shared-State Concurrency
        Transfer funds
    between bank accounts


                            25
Account
public
class
Account
{




private
double
balance;




public
void
withdraw(double
amount)
{





balance
‐=
amount;



}




public
void
deposit(double
amount)
{





balance
+=
amount;



}


}

>   Not thread-safe

                                       26
Let’s make it thread-safe
public
class
Account
{




private
double
balance;




public
synchronized
void
withdraw(double
amount)
{





balance
‐=
amount;



}




public
synchronized
void
deposit(double
amount)
{





balance
+=
amount;



}


}

>Thread-safe,      right? 


                                                 27
It’s still broken
     Not atomic



                  28
Let’s write an atomic transfer method
 public
class
Account
{
 

...



public
synchronized
void
transferTo(





Account
to,
double
amount)
{





this.withdraw(amount);







to.deposit(amount);



}





...

}

>   This will work right?
                                          29
Let’s transfer funds
Account
alice
=
...


Account
bob
=
...





//
in
one
thread


alice.transferTo(bob,
10.0D);





//
in
another
thread


bob.transferTo(alice,
3.0D);




                                  30
Might lead to
DEADLOCK
Darn, this is really hard!!!


                               31
We need to enforce lock ordering
> How?
> Java won’t help us
> Need to use code convention (names etc.)
> Requires knowledge about the internal state
  and implementation of Account
> …runs counter to the principles of
  encapsulation in OOP
> Opens up a Can of Worms




                                                32
The problem with locks
Locks do not compose
Taking too few locks
Taking too many locks
Taking the wrong locks
Taking locks in the wrong order
Error recovery is hard




                                  33
Java bet on the
  wrong horse
But we’re not completely screwed
     There are alternatives


                                   34
We need better
and more high-level
   abstractions


                      35
Alternative Paradigms
>Software Transactional Memory (STM)
>Message-Passing Concurrency (Actors)
>Dataflow Concurrency




                                 36
Software Transactional
    Memory (STM)


                     37
Software Transactional Memory
> See   the memory (heap and stack) as a
  transactional dataset
> Similar to a database
   begin

   commit

   abort/rollback

> Transactions are retried automatically upon
  collision
> Rolls back the memory on abort




                                                38
Software Transactional Memory
> Transactions can nest
> Transactions compose (yipee!!)



atomic
{








..








atomic
{











..









}





}






                                   39
Restrictions
> All
    operations in scope of a transaction:
  Need to be idempotent

  Can’t have side-effects




                                            40
Case study:
Clojure

              41
What is Clojure?
> Functionallanguage
> Runs on the JVM
> Only immutable data and datastructures
> Pragmatic Lisp
> Great Java interoperability
> Dynamic, but very fast




                                           42
Clojure’s concurrency story
> STM  (Refs)
   Synchronous Coordinated

> Atoms
   Synchronous Uncoordinated

> Agents
   Asynchronous Uncoordinated

> Vars
   Synchronous Thread Isolated




                                  43
STM (Refs)
>A  Ref holds a reference to an immutable value
> A Ref can only be changed in a transaction
> Updates are atomic and isolated (ACI)
> A transaction sees its own snapshot of the world
> Transactions are retried upon collision




                                                 44
Let’s get back to our banking problem




    The STM way
      Transfer funds
  between bank accounts

                                        45
Create two accounts
;;
alice’s
account
with
balance
1000
USD
(def
alice
(ref
1000))


;;
bob’s
account
with
balance
1000
USD
(def
bob
(ref
1000))





                                         46
Transfer 100 bucks
;;
amount
to
transfer
(def
amount
100)







;;
not
valid
;;
throws
exception
since

;;
no
transaction
is
running
(ref‐set
alice
(‐
@alice
amount))

(ref‐set
bob
(+
@bob
amount))




                                     47
Wrap in a transaction

;;
update
both
accounts
inside
a
transaction
(dosync



(ref‐set
alice
(‐
@alice
amount))


(ref‐set
bob
(+
@bob
amount)))




                                       48
Potential problems with STM
High contention (many transaction collisions) can lead to:
   Potential bad performance and too high latency
   Progress can not be guaranteed (e.g. live locking)
   Fairness is not maintained
Implementation details hidden in black box




                                                   49
My (humble) opinion on STM
> Can  never work fine in a language that don’t have
 compiler enforced immutability
 > E.g. never in Java (as of today)


> Shouldnot be used to “patch” Shared-State
 Concurrency

> Still
     a research topic how to do it in imperative
 languages


                                                   50
Discussion: Problem 1
Need for consensus and truly shared knowledge
Shared-State Concurrency
  Bad fit
Software Transactional Memory
   Great fit
Message-Passing Concurrency
  Terrible fit
Dataflow Concurrency
  Terrible fit


                                                51
Message-Passing
  Concurrency


                  52
Actor Model of Concurrency
> Implements   Message-Passing Concurrency
> Originates in a 1973 paper by Carl Hewitt
> Implemented in Erlang, Occam, Oz
> Encapsulates state and behavior
> Closer to the definition of OO than classes




                                                53
Actor Model of Concurrency
> Share  NOTHING
> Isolated lightweight processes
 >   Can easily create millions on a single workstation
> Communicates  through messages
> Asynchronous and non-blocking




                                                          54
Actor Model of Concurrency
> No shared state
   … hence, nothing to synchronize.

> Each actor has a mailbox (message queue)




                                             55
Actor Model of Concurrency
> Non-blocking    send
> Blocking receive
> Messages are immutable
> Highly performant and scalable
   Similar to Staged Event Driven Achitecture style (SEDA)




                                                   56
Actor Model of Concurrency
> Easier   to reason about
> Raised abstraction level
> Easier to avoid
   Race conditions

   Deadlocks

   Starvation

   Live locks




                             57
Fault-tolerant systems
> Link   actors
> Supervisor hierarchies
   One-for-one

   All-for-one

> Ericsson’s Erlang success story
   9 nines availability (31 ms/year downtime)




                                                 58
Roadmap:
   Let’s look at three problem domains
1. Need for consensus and truly shared knowledge
  Example: Banking

2. Coordination of independent tasks/processes
  Example: Scheduling, Gaming

3. Workflow related dependent processes
  Example: Business processes, MapReduce




                                                 59
Problem 2:
A game of ping pong



                      60
Shared-State Concurrency
     A game of ping pong



                           61
Ping Pong Table
public
class
PingPongTable
{


public
void
hit(String
hitter)
{




System.out.println(hitter);


}
}




                                     62
Player
 public
class
Player
implements
Runnable
{
 

private
PingPongTable
myTable;

 

private
String
myName;
 

public
Player(String
name,

 















PingPongTable
table)
{
 



myName
=
name;
 



myTable
=
table;
 

}

 

...
 }
                                      63
Player cont...


...


public
void
run()
{




while
(true)
{






synchronized(myTable)
{








try
{










myTable.hit(myName);










myTable.notifyAll();










myTable.wait();








}
catch
(InterruptedException
e)
{}






}




}


}
}
                                              64
Run it
PingPongTable
table
=
new
PingPongTable();
Thread
ping
=





new
Thread(new
Player("Ping",
table));
Thread
pong
=





new
Thread(new
Player("Pong",
table));
ping.start();

pong.start();





                                       65
Help: java.util.concurrent
> Great  library
> Raises the abstraction level
  > No more wait/notify & synchronized blocks
  > Concurrent collections
  > Executors, ParallelArray
> Simplifies concurrent code
> Use it, don’t roll your own




                                                66
Actors
A game of ping pong



                      67
Define message




    case
object
Ball



                       68
Player 1: Pong

val
pong
=
actor
{




loop
{







receive
{





//
wait
on
message








case
Ball
=>
//
match
on
message
Ball










println("Pong")










reply(Ball)






}




}


}

                                       69
Player 2: Ping

val
ping
=
actor
{




pong
!
Ball
//
start
the
game




loop
{







receive
{








case
Ball
=>











println("Ping")










reply(Ball)






}




}


}
                                    70
Run it
...well, they are already up and running




                                           71
Actor implementations for the JVM
> Killim(Java)
> Jetlang (Java)
> Actor’s Guild (Java)
> ActorFoundry (Java)
> Actorom (Java)
> FunctionalJava (Java)
> Akka Actor Kernel (Java/Scala)
> GParallelizer (Groovy)
> Fan Actors (Fan)



                                    72
Discussion: Problem 2
Coordination of interrelated tasks/processes

Shared-State Concurrency
  Bad fit (ok if java.util.concurrent is used)
STM
  Won’t help
Message-Passing Concurrency
  Great fit
Dataflow Concurrency
  Ok


                                                 73
Dataflow Concurrency
  The forgotten paradigm




                           74
Dataflow Concurrency
> Declarative
> No  observable non-determinism
> Data-driven – threads block until data is available
> On-demand, lazy
> No difference between:
  > Concurrent and
  > Sequential code




                                                   75
Dataflow Concurrency
> No race-conditions
> Deterministic
> Simple and beautiful




                         76
Dataflow Concurrency
> Dataflow (Single-Assignment) Variables
> Dataflow Streams (the tail is a dataflow variable)
> Implemented in Oz and Alice




                                                   77
Just three operations
> Create  a dataflow variable
> Wait for the variable to be bound
> Bind the variable




                                      78
Limitations
> Can’t  have side-effects
   Exceptions

   IO (println, File, Socket etc.)

   Time

   etc.

 Not general-purpose

 Generally good for well-defined isolated modules




                                                79
Oz-style dataflow concurrency for the JVM
> Created   my own implementation (DSL)
 >   On top of Scala




                                          80
API: Dataflow Variable
//
Create
dataflow
variable


val
x,
y,
z
=
new
DataFlowVariable[Int]





//
Access
dataflow
variable
(Wait
to
be
bound)


z()





//
Bind
dataflow
variable


x
<<
40





//
Lightweight
thread


thread
{
y
<<
2
}


                                            81
API: Dataflow Stream
Deterministic streams (not IO streams)

//
Create
dataflow
stream


val
producer
=
new
DataFlowStream[Int]





//
Append
to
stream


producer
<<<
s





//
Read
from
stream


producer()




                                         82
Roadmap:
   Let’s look at three problem domains
1. Need for consensus and truly shared knowledge
  Example: Banking

2. Coordination of independent tasks/processes
  Example: Scheduling, Gaming

3. Workflow related dependent processes
  Example: Business processes, MapReduce




                                                 83
Problem 3:
Producer/Consumer



                    84
Shared-State Concurrency
     Producer/Consumer



                         85
Use java.util.concurrent
Fork/Join framework (ParallelArray etc.)
ExecutorService
Future
BlockingQueue




                                           86
Dataflow Concurrency
   Producer/Consumer



                       87
Example: Dataflow Variables
//
sequential
version
val
x,
y,
z
=
new
DataFlowVariable[Int]


x
<<
40

y
<<
2
z
<<
x()
+
y()


println("z
=
"
+
z())






                                       88
Example: Dataflow Variables
//
concurrent
version:
no
difference
val
x,
y,
z
=
new
DataFlowVariable[Int]


thread
{
x
<<
40
}


thread
{
y
<<
2
}


thread
{




z
<<
x()
+
y()




println("z
=
"
+
z())


}



                                       89
Dataflow Concurrency in Java

DataRush (commercial)
Flow-based Programming in Java (dead?)
FlowJava (academic and dead)




                                         90
Discussion: Problem 3
Workflow related dependent processes

Shared-State Concurrency
  Ok (if java.util.concurrent is used)
STM
  Won’t help
Message-Passing Concurrency
  Ok
Dataflow Concurrency
  Great fit


                                         91
Wrap up
> Parallel programs is becoming increasingly important
> We need a simpler way of writing concurrent
  programs
> “Java-style” concurrency is too hard
> There are alternatives worth exploring
   Message-Passing Concurrency

   Software Transactional Memory

   Dataflow Concurrency

 Each with their strengths and weaknesses




                                                92
Jonas Bonér
Crisp AB
blog: http://jonasboner.com
work: http://crisp.se
code: http://github.com/jboner
twitter: jboner

                           93

More Related Content

What's hot

Introduction to Spring Boot!
Introduction to Spring Boot!Introduction to Spring Boot!
Introduction to Spring Boot!
Jakub Kubrynski
 

What's hot (20)

Distributed applications using Hazelcast
Distributed applications using HazelcastDistributed applications using Hazelcast
Distributed applications using Hazelcast
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
 
Tcp ip & io model
Tcp ip & io modelTcp ip & io model
Tcp ip & io model
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
Introduction to spring boot
Introduction to spring bootIntroduction to spring boot
Introduction to spring boot
 
Discover Quarkus and GraalVM
Discover Quarkus and GraalVMDiscover Quarkus and GraalVM
Discover Quarkus and GraalVM
 
Java 9/10/11 - What's new and why you should upgrade
Java 9/10/11 - What's new and why you should upgradeJava 9/10/11 - What's new and why you should upgrade
Java 9/10/11 - What's new and why you should upgrade
 
Mutiny + quarkus
Mutiny + quarkusMutiny + quarkus
Mutiny + quarkus
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
Introduction to Tokyo Products
Introduction to Tokyo ProductsIntroduction to Tokyo Products
Introduction to Tokyo Products
 
KSQL Performance Tuning for Fun and Profit ( Nick Dearden, Confluent) Kafka S...
KSQL Performance Tuning for Fun and Profit ( Nick Dearden, Confluent) Kafka S...KSQL Performance Tuning for Fun and Profit ( Nick Dearden, Confluent) Kafka S...
KSQL Performance Tuning for Fun and Profit ( Nick Dearden, Confluent) Kafka S...
 
Spring boot Under Da Hood
Spring boot Under Da HoodSpring boot Under Da Hood
Spring boot Under Da Hood
 
Loom Virtual Threads in the JDK 19
Loom Virtual Threads in the JDK 19Loom Virtual Threads in the JDK 19
Loom Virtual Threads in the JDK 19
 
Performance Tuning - Understanding Garbage Collection
Performance Tuning - Understanding Garbage CollectionPerformance Tuning - Understanding Garbage Collection
Performance Tuning - Understanding Garbage Collection
 
Looming Marvelous - Virtual Threads in Java Javaland.pdf
Looming Marvelous - Virtual Threads in Java Javaland.pdfLooming Marvelous - Virtual Threads in Java Javaland.pdf
Looming Marvelous - Virtual Threads in Java Javaland.pdf
 
The Integration of Laravel with Swoole
The Integration of Laravel with SwooleThe Integration of Laravel with Swoole
The Integration of Laravel with Swoole
 
Introduction to Java 11
Introduction to Java 11 Introduction to Java 11
Introduction to Java 11
 
Introduction to Spring WebFlux #jsug #sf_a1
Introduction to Spring WebFlux #jsug #sf_a1Introduction to Spring WebFlux #jsug #sf_a1
Introduction to Spring WebFlux #jsug #sf_a1
 
Introduction to Spring Boot!
Introduction to Spring Boot!Introduction to Spring Boot!
Introduction to Spring Boot!
 
Spring Security
Spring SecuritySpring Security
Spring Security
 

Viewers also liked

Life Beyond the Illusion of Present
Life Beyond the Illusion of PresentLife Beyond the Illusion of Present
Life Beyond the Illusion of Present
Jonas Bonér
 

Viewers also liked (20)

Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)
 
Go Reactive: Building Responsive, Resilient, Elastic & Message-Driven Systems
Go Reactive: Building Responsive, Resilient, Elastic & Message-Driven SystemsGo Reactive: Building Responsive, Resilient, Elastic & Message-Driven Systems
Go Reactive: Building Responsive, Resilient, Elastic & Message-Driven Systems
 
Without Resilience, Nothing Else Matters
Without Resilience, Nothing Else MattersWithout Resilience, Nothing Else Matters
Without Resilience, Nothing Else Matters
 
Building Reactive Systems with Akka (in Java 8 or Scala)
Building Reactive Systems with Akka (in Java 8 or Scala)Building Reactive Systems with Akka (in Java 8 or Scala)
Building Reactive Systems with Akka (in Java 8 or Scala)
 
Life Beyond the Illusion of Present
Life Beyond the Illusion of PresentLife Beyond the Illusion of Present
Life Beyond the Illusion of Present
 
From Microliths To Microsystems
From Microliths To MicrosystemsFrom Microliths To Microsystems
From Microliths To Microsystems
 
Reactive Supply To Changing Demand
Reactive Supply To Changing DemandReactive Supply To Changing Demand
Reactive Supply To Changing Demand
 
Building Scalable, Highly Concurrent & Fault Tolerant Systems - Lessons Learned
Building Scalable, Highly Concurrent & Fault Tolerant Systems -  Lessons LearnedBuilding Scalable, Highly Concurrent & Fault Tolerant Systems -  Lessons Learned
Building Scalable, Highly Concurrent & Fault Tolerant Systems - Lessons Learned
 
Go Reactive: Event-Driven, Scalable, Resilient & Responsive Systems
Go Reactive: Event-Driven, Scalable, Resilient & Responsive SystemsGo Reactive: Event-Driven, Scalable, Resilient & Responsive Systems
Go Reactive: Event-Driven, Scalable, Resilient & Responsive Systems
 
Akka: Simpler Scalability, Fault-Tolerance, Concurrency & Remoting through Ac...
Akka: Simpler Scalability, Fault-Tolerance, Concurrency & Remoting through Ac...Akka: Simpler Scalability, Fault-Tolerance, Concurrency & Remoting through Ac...
Akka: Simpler Scalability, Fault-Tolerance, Concurrency & Remoting through Ac...
 
Event Driven-Architecture from a Scalability perspective
Event Driven-Architecture from a Scalability perspectiveEvent Driven-Architecture from a Scalability perspective
Event Driven-Architecture from a Scalability perspective
 
Introducing Akka
Introducing AkkaIntroducing Akka
Introducing Akka
 
Scalability, Availability & Stability Patterns
Scalability, Availability & Stability PatternsScalability, Availability & Stability Patterns
Scalability, Availability & Stability Patterns
 
Introduce about Nodejs - duyetdev.com
Introduce about Nodejs - duyetdev.comIntroduce about Nodejs - duyetdev.com
Introduce about Nodejs - duyetdev.com
 
Mvi an architecture for reactive programming
Mvi an architecture for reactive programmingMvi an architecture for reactive programming
Mvi an architecture for reactive programming
 
HTTP/2 : why upgrading the web? - apidays Paris
HTTP/2 : why upgrading the web? - apidays ParisHTTP/2 : why upgrading the web? - apidays Paris
HTTP/2 : why upgrading the web? - apidays Paris
 
HTML5, HTTP2, and You 1.1
HTML5, HTTP2, and You 1.1HTML5, HTTP2, and You 1.1
HTML5, HTTP2, and You 1.1
 
Reactive Reatime Big Data with Open Source Lambda Architecture - TechCampVN 2014
Reactive Reatime Big Data with Open Source Lambda Architecture - TechCampVN 2014Reactive Reatime Big Data with Open Source Lambda Architecture - TechCampVN 2014
Reactive Reatime Big Data with Open Source Lambda Architecture - TechCampVN 2014
 
epoll() - The I/O Hero
epoll() - The I/O Heroepoll() - The I/O Hero
epoll() - The I/O Hero
 
Akka persistence == event sourcing in 30 minutes
Akka persistence == event sourcing in 30 minutesAkka persistence == event sourcing in 30 minutes
Akka persistence == event sourcing in 30 minutes
 

Similar to State: You're Doing It Wrong - Alternative Concurrency Paradigms For The JVM

Session 9 Tp9
Session 9 Tp9Session 9 Tp9
Session 9 Tp9
phanleson
 

Similar to State: You're Doing It Wrong - Alternative Concurrency Paradigms For The JVM (20)

DIY: A distributed database cluster, or: MySQL Cluster
DIY: A distributed database cluster, or: MySQL ClusterDIY: A distributed database cluster, or: MySQL Cluster
DIY: A distributed database cluster, or: MySQL Cluster
 
Ho20
Ho20Ho20
Ho20
 
The free lunch is over
The free lunch is overThe free lunch is over
The free lunch is over
 
Cache Consistency – Requirements and its packet processing Performance implic...
Cache Consistency – Requirements and its packet processing Performance implic...Cache Consistency – Requirements and its packet processing Performance implic...
Cache Consistency – Requirements and its packet processing Performance implic...
 
A
AA
A
 
BlockChain for the Banker
BlockChain for the BankerBlockChain for the Banker
BlockChain for the Banker
 
Exploiting Concurrency with Dynamic Languages
Exploiting Concurrency with Dynamic LanguagesExploiting Concurrency with Dynamic Languages
Exploiting Concurrency with Dynamic Languages
 
Sharding in MongoDB 4.2 #what_is_new
 Sharding in MongoDB 4.2 #what_is_new Sharding in MongoDB 4.2 #what_is_new
Sharding in MongoDB 4.2 #what_is_new
 
Actor Model
Actor ModelActor Model
Actor Model
 
Reactsf 2014-message-driven
Reactsf 2014-message-drivenReactsf 2014-message-driven
Reactsf 2014-message-driven
 
Session 9 Tp9
Session 9 Tp9Session 9 Tp9
Session 9 Tp9
 
Operating System Process Synchronization
Operating System Process SynchronizationOperating System Process Synchronization
Operating System Process Synchronization
 
Reactive Design Patterns: a talk by Typesafe's Dr. Roland Kuhn
Reactive Design Patterns: a talk by Typesafe's Dr. Roland KuhnReactive Design Patterns: a talk by Typesafe's Dr. Roland Kuhn
Reactive Design Patterns: a talk by Typesafe's Dr. Roland Kuhn
 
Managing Unstructured Data: Lobs in the World of JSON
Managing Unstructured Data: Lobs in the World of JSONManaging Unstructured Data: Lobs in the World of JSON
Managing Unstructured Data: Lobs in the World of JSON
 
Microservices for performance - GOTO Chicago 2016
Microservices for performance - GOTO Chicago 2016Microservices for performance - GOTO Chicago 2016
Microservices for performance - GOTO Chicago 2016
 
ClickHouse Keeper
ClickHouse KeeperClickHouse Keeper
ClickHouse Keeper
 
Ch3-2
Ch3-2Ch3-2
Ch3-2
 
Alternate concurrency models
Alternate concurrency modelsAlternate concurrency models
Alternate concurrency models
 
01 what is blockchain
01 what is blockchain01 what is blockchain
01 what is blockchain
 
Chronicle accelerate building a digital currency
Chronicle accelerate   building a digital currencyChronicle accelerate   building a digital currency
Chronicle accelerate building a digital currency
 

More from Jonas Bonér

Kalix: Tackling the The Cloud to Edge Continuum
Kalix: Tackling the The Cloud to Edge ContinuumKalix: Tackling the The Cloud to Edge Continuum
Kalix: Tackling the The Cloud to Edge Continuum
Jonas Bonér
 
Cloudstate—Towards Stateful Serverless
Cloudstate—Towards Stateful ServerlessCloudstate—Towards Stateful Serverless
Cloudstate—Towards Stateful Serverless
Jonas Bonér
 

More from Jonas Bonér (7)

We are drowning in complexity—can we do better?
We are drowning in complexity—can we do better?We are drowning in complexity—can we do better?
We are drowning in complexity—can we do better?
 
Kalix: Tackling the The Cloud to Edge Continuum
Kalix: Tackling the The Cloud to Edge ContinuumKalix: Tackling the The Cloud to Edge Continuum
Kalix: Tackling the The Cloud to Edge Continuum
 
The Reactive Principles: Design Principles For Cloud Native Applications
The Reactive Principles: Design Principles For Cloud Native ApplicationsThe Reactive Principles: Design Principles For Cloud Native Applications
The Reactive Principles: Design Principles For Cloud Native Applications
 
Cloudstate—Towards Stateful Serverless
Cloudstate—Towards Stateful ServerlessCloudstate—Towards Stateful Serverless
Cloudstate—Towards Stateful Serverless
 
Designing Events-first Microservices
Designing Events-first MicroservicesDesigning Events-first Microservices
Designing Events-first Microservices
 
How Events Are Reshaping Modern Systems
How Events Are Reshaping Modern SystemsHow Events Are Reshaping Modern Systems
How Events Are Reshaping Modern Systems
 
Reactive Microsystems: The Evolution of Microservices at Scale
Reactive Microsystems: The Evolution of Microservices at ScaleReactive Microsystems: The Evolution of Microservices at Scale
Reactive Microsystems: The Evolution of Microservices at Scale
 

Recently uploaded

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Recently uploaded (20)

Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 

State: You're Doing It Wrong - Alternative Concurrency Paradigms For The JVM