Sunday, 4 December 2011

Video of our JAX London session

At JAX London Mike and I presented "Understanding the Disruptor - A Beginner's Guide to Hardcore Concurrency".  This is the session we initially previewed to the London Java Community a few weeks earlier.  The content is the same, but the feel of the presentation was quite different to us - the venue for the LJC event was more intimate, and it was easier to interact with the audience.  At JAX, we were up on stage, which was pretty cool actually, but meant that it felt more like a lecture and it was less easy to connect with the audience.


We received some really great feedback on this presentation, and it was brilliant to see a lot of the speakers from JAX there watching us.

6 comments:

  1. Thank you for uploading this presentation!

    I have a question regarding the slide appearing @ 22:04. Business logic has to wait for Journaling and Replication before proessing a request from the ring buffer. Are you using some kind of synchronization (i.e. volatile flags or locks)? I would expect to see an additional ring buffer between {replication, journaling} and business logic.

    ReplyDelete
  2. You can create a SequenceBarrier to define dependencies between the event handlers. See http://mechanitis.blogspot.com/2011/07/dissecting-disruptor-wiring-up.html - the names of the objects have changed slightly since I wrote that, but it gives you a feel for the mechanism.

    ReplyDelete
  3. hi,

    I have a producer and multiple consumers (arrayblockingqueue based). The producer based on known conditions puts the message to the appropriate consumer's queue. so a single message is always sent to only one consumer here.

    Given this, to model it with disruptor framework, is creating seperate ring buffers per consumer the only option? the producer choosing the appropriate target ring buffer for that message.

    ReplyDelete
  4. Hi Rahul,

    It's work pointing out that there's a Google group for the disruptor (http://groups.google.com/group/lmax-disruptor) which has some brilliant people constantly watching it - that's the best place for these sorts of queries, plus many questions have already been answered there.

    There are a number of options for your specific example. In all of them it's probably best to use a single ring buffer. A simple solution is to have the producer set a flag on the event to show what type it is and then place it on the ring buffer. Each consumer will then only process those with the flag that is appropriate for them.

    The newest version of the Disruptor has a number of different types of consumers, and some of those might also be appropriate.

    ReplyDelete
  5. This comment has been removed by the author.

    ReplyDelete
    Replies
    1. Hi Lee, it's been a while since I worked on this stuff, but it's a good question. The best place to get more information on things like this is the Mechanical Sympathy mailing list: https://groups.google.com/forum/#!forum/mechanical-sympathy

      Delete