More Than Java Concurrency

49
Darren.Wang(王福) More Than Java Concurrency Thursday, January 20, 2011

description

more choices for java's default share-state concurrency modelthe doc is incomplete

Transcript of More Than Java Concurrency

Page 1: More Than Java Concurrency

Darren.Wang(王福强)

More Than Java Concurrency

Thursday, January 20, 2011

Page 2: More Than Java Concurrency

Agenda

More Than Java Concurrency? What’s More?

Several Concurrency Models/Patterns

Case Study

Questions?

The end

Thursday, January 20, 2011

Page 3: More Than Java Concurrency

Why concurrency?

为了反映一些问题的逻辑结构

为了应对相互独立的多台物理设备

为了同时在多部处理器上运行以提高性能

Thursday, January 20, 2011

Page 4: More Than Java Concurrency

What concurrency offers

reduce latency

divide and conquer, run in parallel reduce the latency

hide latency

asynchronous

increase throughput

more tasks can be run without wasting available computing power

Thursday, January 20, 2011

Page 5: More Than Java Concurrency

What we do with Java Concurrency

State, That’s all of the about.

Atomicity - keep state intact

Visibility - make right state access

Thursday, January 20, 2011

Page 6: More Than Java Concurrency

When Things Go Wrong

Thursday, January 20, 2011

Page 7: More Than Java Concurrency

What If ...

Thursday, January 20, 2011

Page 8: More Than Java Concurrency

What We Will Talk Today

Share-State Concurrency

Share-Nothing Concurrency

Software Transaction Memory

Data-Flow Concurrency

Thursday, January 20, 2011

Page 9: More Than Java Concurrency

Share-State Concurrency

Thursday, January 20, 2011

Page 10: More Than Java Concurrency

JMM Simplified

Picture borrowed from <<Java多线程设计模式>>

Thursday, January 20, 2011

Page 11: More Than Java Concurrency

JMM escalation

Thursday, January 20, 2011

Page 12: More Than Java Concurrency

How to deal with?

How many ways can you count?

Here we go...

Thursday, January 20, 2011

Page 13: More Than Java Concurrency

Immutability

immutable anytime

Immutable Object

immutable before publishing

Map & ConcurrencyMap

(1)To Find More in book <<Java Concurrency In Practice>>

Thursday, January 20, 2011

Page 14: More Than Java Concurrency

Confinement

Thread Confinement

Thread-Specific Variables(ThreadLocal)

Stack Confinement

Method Stack Scope

Thursday, January 20, 2011

Page 15: More Than Java Concurrency

Synchronization

Synchronized Block(Implicit Lock)

Explicit Lock

Volatile (Partial Synchronization Support)

Thursday, January 20, 2011

Page 16: More Than Java Concurrency

Gotchas With Synchronization

Deadlock

how to prevent it?

Live lock

Starvation

Thursday, January 20, 2011

Page 17: More Than Java Concurrency

Gotchas With Synchronization

Deadlock

how to prevent it?

Live lock

Starvation

Resource Re-ordering

Thursday, January 20, 2011

Page 18: More Than Java Concurrency

Gotchas With Synchronization

Deadlock

how to prevent it?

Live lock

Starvation

Resource Re-ordering

Periodic Retry

Thursday, January 20, 2011

Page 19: More Than Java Concurrency

Performance Tuning with Synchronization

reduce the time of holding locks

break global locks into fine-grained locks

what coming next?

Thursday, January 20, 2011

Page 20: More Than Java Concurrency

CAS

Compare-And-Set | Compare-And-Swap

java.util.concurrent.atomic after Java5

AtomicInteger

AtomicLong

AtomicBoolean

AtomicReference

Thursday, January 20, 2011

Page 21: More Than Java Concurrency

Section Conclusion

Pessimistic Model

Lock-Based

Optimistic Model

Lock-Free

Thursday, January 20, 2011

Page 22: More Than Java Concurrency

Share-Nothing Concurrency

Thursday, January 20, 2011

Page 23: More Than Java Concurrency

Share-Nothing Concurrency

AKA. Message Passing Concurrency

Confinement In a Big Picture

Thursday, January 20, 2011

Page 24: More Than Java Concurrency

Actor Model

First proposed by Carl Hewitt in 1973

improved by Gul Agha

An Actor Can:

change internal state

send messages to peer actors

create new actors

migrate to another computing host

Thursday, January 20, 2011

Page 25: More Than Java Concurrency

Actor Rocks

more light weight

event based actors of akka can create 6.5million on 4 G RAM (600 bytes each)

much easier, just send messages

counter ! tick

Thursday, January 20, 2011

Page 26: More Than Java Concurrency

Actors Available

Erlang Platform

Scala Platform

TBA, EBA

Lift Actor, Akka Actor

Java Platform

Kilim, SALSA(simple actor language, system and architecture)

Other

Thursday, January 20, 2011

Page 27: More Than Java Concurrency

Actor Almighty?

when we really have shared states, e.g. bank account?

when we need to form unified consensus

when we need synchronous behavior

a bit verbose compared to method dispatch

Thursday, January 20, 2011

Page 28: More Than Java Concurrency

Section Conclusion

Actor Model Rocks In Some Situations, But not all

Share Nothing Simplify the Architecture Design

Prefer Share Nothing to Share State If Possible

Thursday, January 20, 2011

Page 29: More Than Java Concurrency

You Know Lego, Right?

Thursday, January 20, 2011

Page 30: More Than Java Concurrency

Case Study I

Session Management

Centralized Storage

memcached, database...

Client-Specific Storage

secure cookie

other local-storage mechanism

Thursday, January 20, 2011

Page 31: More Than Java Concurrency

Case Study II

Map-Reduce

When Share Nothing can rock in

When Share State Is a Must

Thursday, January 20, 2011

Page 32: More Than Java Concurrency

Case Study III

Symmetric Cluster

Share Nothing

Asymmetric Cluster

Share State

Thursday, January 20, 2011

Page 33: More Than Java Concurrency

STM

Software Transaction Memory

Transaction operations execute in the own thread in parallel, commit will cause One to be successful and others to abort or retry

Thursday, January 20, 2011

Page 34: More Than Java Concurrency

Sounds Familiar?

Optimistic Model

Can be nested

Simple Programming Model

Thursday, January 20, 2011

Page 35: More Than Java Concurrency

Available Solutions

Clojure

Concurrent Haskell

STM .Net

More...

Thursday, January 20, 2011

Page 36: More Than Java Concurrency

Cons

All operations in scope of a transaction:

need to be idempotent

can’t have side-effects

Memory Concern

Conflicting Rate Concern

Thursday, January 20, 2011

Page 37: More Than Java Concurrency

Section Conclusion

optimistic model

simple programming model

with restrictions

which may cause limitations(MS drops STM)

Thursday, January 20, 2011

Page 38: More Than Java Concurrency

Data-Flow Concurrency

AKA. Declarative Concurrency

Thursday, January 20, 2011

Page 39: More Than Java Concurrency

Have you ever...

Thursday, January 20, 2011

Page 40: More Than Java Concurrency

Features

Single Assignment Variables

Data-States trigger process flow

Thursday, January 20, 2011

Page 41: More Than Java Concurrency

Available Languages

LabView图形化编程语言

Thursday, January 20, 2011

Page 42: More Than Java Concurrency

Usage Scenarios

Signal Process System

Thursday, January 20, 2011

Page 43: More Than Java Concurrency

Typical Operations

create a data-flow variable

wait for the variable to be bound

bind the variable

Thursday, January 20, 2011

Page 44: More Than Java Concurrency

Limitations

Can’t have side-effects

Exceptions

IO

Others

Thursday, January 20, 2011

Page 45: More Than Java Concurrency

Section Conclusion

Data Based Concurrency

Thursday, January 20, 2011

Page 46: More Than Java Concurrency

comparison of common facilities

Executor (Agent)

Actor (HawtDispatch)

STM

Transactor(Actor + STM)

Thursday, January 20, 2011

Page 47: More Than Java Concurrency

Thursday, January 20, 2011

Page 48: More Than Java Concurrency

Thank You

Thursday, January 20, 2011

Page 49: More Than Java Concurrency

The End

Thursday, January 20, 2011