Concurrent Programming Using The Disruptor Trisha Gee LMAX - - PowerPoint PPT Presentation

concurrent programming using the disruptor
SMART_READER_LITE
LIVE PREVIEW

Concurrent Programming Using The Disruptor Trisha Gee LMAX - - PowerPoint PPT Presentation

Concurrent Programming Using The Disruptor Trisha Gee LMAX Wednesday, 23 May 12 Concurrent Programming Using The Disruptor Trisha Gee, Developer at LMAX @trisha_gee mechanitis.blogspot.com Wednesday, 23 May 12 The Disruptor? Wednesday,


slide-1
SLIDE 1

Concurrent Programming Using The Disruptor

Trisha Gee LMAX

Wednesday, 23 May 12

slide-2
SLIDE 2

Concurrent Programming Using The Disruptor

Trisha Gee, Developer at LMAX

@trisha_gee mechanitis.blogspot.com

Wednesday, 23 May 12

slide-3
SLIDE 3

The Disruptor?

Wednesday, 23 May 12

slide-4
SLIDE 4

What I’m covering

  • Overview of the Disruptor
  • Create your own!
  • Turn it up to Eleven
  • Q&A

Wednesday, 23 May 12

slide-5
SLIDE 5

What is it?

  • Data structure and work flow with no

contention.

  • Very fast message passing.
  • Allows you to go truly parallel.

Wednesday, 23 May 12

slide-6
SLIDE 6

So...?

Wednesday, 23 May 12

slide-7
SLIDE 7

The Magic RingBuffer

Wednesday, 23 May 12

slide-8
SLIDE 8

The Magic RingBuffer

Wednesday, 23 May 12

slide-9
SLIDE 9

The Magic RingBuffer

Wednesday, 23 May 12

slide-10
SLIDE 10

The Magic RingBuffer

Wednesday, 23 May 12

slide-11
SLIDE 11

The Magic RingBuffer

Wednesday, 23 May 12

slide-12
SLIDE 12

The Magic RingBuffer

Wednesday, 23 May 12

slide-13
SLIDE 13

The Magic RingBuffer

Wednesday, 23 May 12

slide-14
SLIDE 14

Creating a RingBuffer

final RingBuffer<SimpleEvent> ringBuffer = new RingBuffer<SimpleEvent>(SimpleEvent.EVENT_FACTORY, RING_BUFFER_SIZE);

Wednesday, 23 May 12

slide-15
SLIDE 15

The Events are Buckets

Wednesday, 23 May 12

slide-16
SLIDE 16

Great! I want one!

public class SimpleEvent { public static final EventFactory<SimpleEvent> EVENT_FACTORY = new SimpleEventFactory(); private volatile String value; private static class SimpleEventFactory implements EventFactory<SimpleEvent> { @Override public SimpleEvent newInstance() { return new SimpleEvent(); } } }

Wednesday, 23 May 12

slide-17
SLIDE 17

I’ve got a RingBuffer!

  • Erm.... how do I poke things into it?

Wednesday, 23 May 12

slide-18
SLIDE 18

The Publisher

Wednesday, 23 May 12

slide-19
SLIDE 19

Wednesday, 23 May 12

slide-20
SLIDE 20

Wednesday, 23 May 12

slide-21
SLIDE 21

Wednesday, 23 May 12

slide-22
SLIDE 22

Wednesday, 23 May 12

slide-23
SLIDE 23

Wednesday, 23 May 12

slide-24
SLIDE 24

Wednesday, 23 May 12

slide-25
SLIDE 25

What do I do?

SimpleEventTranslator translator = new SimpleEventTranslator(); EventPublisher<SimpleEvent> publisher = new EventPublisher<SimpleEvent>(ringBuffer); // poke your translator here // ...and when you’re done... publisher.publishEvent(translator); public class SimpleEventTranslator implements EventTranslator<SimpleEvent>

Wednesday, 23 May 12

slide-26
SLIDE 26

...so now I want to read

  • The Disruptor provides nice batching

behaviour for free

Wednesday, 23 May 12

slide-27
SLIDE 27

Wednesday, 23 May 12

slide-28
SLIDE 28

Wednesday, 23 May 12

slide-29
SLIDE 29

Wednesday, 23 May 12

slide-30
SLIDE 30

Wednesday, 23 May 12

slide-31
SLIDE 31

Wednesday, 23 May 12

slide-32
SLIDE 32

Wednesday, 23 May 12

slide-33
SLIDE 33

Wednesday, 23 May 12

slide-34
SLIDE 34

Wednesday, 23 May 12

slide-35
SLIDE 35

Wednesday, 23 May 12

slide-36
SLIDE 36

Wednesday, 23 May 12

slide-37
SLIDE 37

Wednesday, 23 May 12

slide-38
SLIDE 38

Wednesday, 23 May 12

slide-39
SLIDE 39

Wednesday, 23 May 12

slide-40
SLIDE 40

Wednesday, 23 May 12

slide-41
SLIDE 41

Wednesday, 23 May 12

slide-42
SLIDE 42

...and all you need is...

public class SimpleEventHandler implements EventHandler<SimpleEvent> { @Override public void onEvent(final SimpleEvent event, final long sequence, final boolean endOfBatch) throws Exception { // do stuff } }

Wednesday, 23 May 12

slide-43
SLIDE 43
  • Shiny. So what?

Wednesday, 23 May 12

slide-44
SLIDE 44

Let’s go parallel

Wednesday, 23 May 12

slide-45
SLIDE 45

And now for something different...

Wednesday, 23 May 12

slide-46
SLIDE 46

Remember Henry Ford?

Wednesday, 23 May 12

slide-47
SLIDE 47

Wednesday, 23 May 12

slide-48
SLIDE 48

Wednesday, 23 May 12

slide-49
SLIDE 49

Wednesday, 23 May 12

slide-50
SLIDE 50

Wednesday, 23 May 12

slide-51
SLIDE 51

Wednesday, 23 May 12

slide-52
SLIDE 52

Wednesday, 23 May 12

slide-53
SLIDE 53

Wednesday, 23 May 12

slide-54
SLIDE 54

Complex workflow...

Wednesday, 23 May 12

slide-55
SLIDE 55

What on Earth has this got to do with RingBuffers?!

Wednesday, 23 May 12

slide-56
SLIDE 56

Wednesday, 23 May 12

slide-57
SLIDE 57

Wednesday, 23 May 12

slide-58
SLIDE 58

Wednesday, 23 May 12

slide-59
SLIDE 59

Wednesday, 23 May 12

slide-60
SLIDE 60

Wednesday, 23 May 12

slide-61
SLIDE 61

Wednesday, 23 May 12

slide-62
SLIDE 62

Wednesday, 23 May 12

slide-63
SLIDE 63

Wednesday, 23 May 12

slide-64
SLIDE 64

Wednesday, 23 May 12

slide-65
SLIDE 65

Wednesday, 23 May 12

slide-66
SLIDE 66

Wednesday, 23 May 12

slide-67
SLIDE 67

Wednesday, 23 May 12

slide-68
SLIDE 68

Wednesday, 23 May 12

slide-69
SLIDE 69

Wednesday, 23 May 12

slide-70
SLIDE 70

Wednesday, 23 May 12

slide-71
SLIDE 71

Wednesday, 23 May 12

slide-72
SLIDE 72

Wednesday, 23 May 12

slide-73
SLIDE 73

Wednesday, 23 May 12

slide-74
SLIDE 74

Wednesday, 23 May 12

slide-75
SLIDE 75

Wednesday, 23 May 12

slide-76
SLIDE 76

Wednesday, 23 May 12

slide-77
SLIDE 77

Wednesday, 23 May 12

slide-78
SLIDE 78

Wednesday, 23 May 12

slide-79
SLIDE 79

Wednesday, 23 May 12

slide-80
SLIDE 80

Wednesday, 23 May 12

slide-81
SLIDE 81

Wednesday, 23 May 12

slide-82
SLIDE 82

Wednesday, 23 May 12

slide-83
SLIDE 83

Wednesday, 23 May 12

slide-84
SLIDE 84

Wednesday, 23 May 12

slide-85
SLIDE 85

Wednesday, 23 May 12

slide-86
SLIDE 86

Wednesday, 23 May 12

slide-87
SLIDE 87

Wednesday, 23 May 12

slide-88
SLIDE 88

Wednesday, 23 May 12

slide-89
SLIDE 89

Wednesday, 23 May 12

slide-90
SLIDE 90

Wednesday, 23 May 12

slide-91
SLIDE 91

Wednesday, 23 May 12

slide-92
SLIDE 92

Wednesday, 23 May 12

slide-93
SLIDE 93

Don’t wrap the buffer!

ringBuffer.setGatingSequences(finalEventProcessor.getSequence());

Wednesday, 23 May 12

slide-94
SLIDE 94

Caveats

Wednesday, 23 May 12

slide-95
SLIDE 95

Is that it?

  • Wait and claim strategies
  • Batch publishing
  • Multiple publishers
  • Different EventHandlers
  • The Wizard
  • You don’t even need a RingBuffer...

Wednesday, 23 May 12

slide-96
SLIDE 96

You get...

  • A framework the encourages you to model

your domain

  • The ability to run in parallel but single-

threaded

  • Reliable ordering
  • ...and it can be very fast

Wednesday, 23 May 12

slide-97
SLIDE 97

More Information

  • Google Code Site, including Wiki

http://code.google.com/p/disruptor/

  • Blogs, e.g. mine: mechanitis.blogspot.com
  • Presentations
  • Google Group

Wednesday, 23 May 12

slide-98
SLIDE 98

Q&A

Wednesday, 23 May 12

slide-99
SLIDE 99

WorkerPool

Wednesday, 23 May 12

slide-100
SLIDE 100

AggregateEventHandler

Wednesday, 23 May 12

slide-101
SLIDE 101

WaitStrategies

  • BlockingWaitStrategy
  • BusySpinWaitStrategy
  • SleepingWaitStrategy
  • YieldingWaitStrategy

Wednesday, 23 May 12

slide-102
SLIDE 102

ClaimStrategies

  • SingleThreadedClaimStrategy
  • MultiThreadedClaimStrategy
  • MultiThreadedLowContentionClaimStrategy

Wednesday, 23 May 12