event loop

Post on 10-May-2015

607 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

A presentation to show the workings of the event loop and how vert.x uses this pattern.

TRANSCRIPT

Event Loop+ Vert.x

Chief Developer @ Senacor Technologies AG!http://www.senacor.com!

jochen.mader@senacor.com!Twitter: @codepitbull

Jochen Mader

CPU

ABC

42

1 2 3

4 5 6

7 8 90

CPU

CPU CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

volatile

CyclicBarrier

AtomicBoolean

synchronized

ReentrantLock

AtomicInteger

AtomicCafe

Thread

ThreadPoolExecutor

RunnableCallable

wooblehttp://www.wooble.wtf

wooblehttp://www.wooble.wtf

wooblehttp://www.wooble.wtf

wooblehttp://www.wooble.wtf

wooblehttp://www.wooble.wtf

wooblehttp://www.wooble.wtf

wooblehttp://www.wooble.wtf

wooblehttp://www.wooble.wtf

wooblehttp://www.wooble.wtf

wooblehttp://www.wooble.wtf

wooblehttp://www.wooble.wtf

wooblehttp://www.wooble.wtf

wooblehttp://www.wooble.wtf

wooblehttp://www.wooble.wtf

wooblehttp://www.wooble.wtf

wooblehttp://www.wooble.wtf

wooblehttp://www.wooble.wtf

wooblehttp://www.wooble.wtf

wooblehttp://www.wooble.wtf

wooblehttp://www.wooble.wtf

wooblehttp://www.wooble.wtf

wooblehttp://www.wooble.wtf

wooblehttp://www.wooble.wtf

wooblehttp://www.wooble.wtf

wooblehttp://www.wooble.wtf

wooblehttp://www.wooble.wtf

wooblehttp://www.wooble.wtf

wooblehttp://www.wooble.wtf

wooblehttp://www.wooble.wtf

wooblehttp://www.wooble.wtf

C10K

ZZZZZZZZZz

ZZZZZZZZZzZZZZZZZZZz

Single Thread

1 Thread w/ lock

2 Threads w/ lock

1 Thread w/ CAS

2 Threads w/ CAS

Volatile

0 12500 25000 37500 50000

Contention

https://github.com/codepitbull/lockperformance

I/OAcces type cycles

L1- Cache 3

L2-Cache 14

RAM 250

Disk 41000000

Network 240000000

http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/

contentionI/O

Channel AChannel BChannel CChannel D

Selector

Event Handler 1Event Handler 2Event Handler 3Event Handler 4Event Handler 5

REACTOR

DO NOT BLOCK!JAVA NIO

Selector selector = Selector.open();channel.configureBlocking(false); SelectionKey key = channel.register(selector, SelectionKey.OP_READ);while(true) { int readyChannels = selector.select(); if(readyChannels == 0) continue; Set<SelectionKey> selectedKeys = selector.selectedKeys(); Iterator<SelectionKey> keyIterator = selectedKeys.iterator(); while(keyIterator.hasNext()) { SelectionKey key = keyIterator.next(); if(key.isAcceptable()) { // a connection was accepted by a ServerSocketChannel. } else if (key.isConnectable()) { // a connection was established with a remote server. } else if (key.isReadable()) { // a channel is ready for reading } else if (key.isWritable()) { // a channel is ready for writing } keyIterator.remove(); }}

I NEEEEDS !NICE API!!!!

Channel AChannel BChannel CChannel D

Selector

Event Handler 1Event Handler 2Event Handler 3Event Handler 4Event Handler 5

12.10.2012

Noch !hübscher?

Quasar

生 ॐ СВОБОДА

Micro Services (Martin Fowler)

http://martinfowler.com/articles/microservices.html

class MustacheRendererVerticle extends Verticle { DefaultMustacheFactory mf = new DefaultMustacheFactory( "de/codepitbull/javaland/mustache"); @Override def start() { vertx.eventBus.registerHandler("template.render", { message -> Mustache mustache = mf.compile(message.body()); StringWriter sw = new StringWriter(); mustache.execute(sw, new Example()).flush(); message.reply(sw.getBuffer().toString()); }); }}

Verticle

Module

1

0..n

0..n

1

System

vert.x

module1

verticle 1 verticle 2

module2

verticle 3 verticle 4

import org.vertx.groovy.platform.Verticleclass DemoVerticle extends Verticle { @Override Object start() { container.deployModule("io.vertx~mod-web-server~2.0.0-final", container.config) }}

io.vertx~mod-web-server~2.0.0-final

officialcommunity

生 ॐ СВОБОДА

Verticle Verticle Verticle Verticle

Verticle Verticle Verticle Verticle

Verticle Verticle Verticle Verticle

Verticle Verticle Verticle Verticle

Verticle Verticle Verticle Verticle

Verticle Verticle Verticle Verticle

Multicast

mod 2mod 1CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

vertx -hamod ? mod ? mod ? mod ?

mod ? mod ? mod ? mod ?

mod 2mod 1CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

vertx -hamod ? mod ? mod ? mod ?

mod ? mod ? mod ? mod ?

mod 2mod 1CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

vertx -hamod ? mod ? mod ? mod ?

mod ? mod ? mod ? mod ?

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

mod 2mod 1CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

vertx -hamod ? mod ? mod ? mod ?

mod ? mod ? mod ? mod ?

CPU

CPU

CPU

CPU

CPU

CPU

CPU

CPU

mod 2mod 1

DEMO

Leseliste/Quellen

http://www.cs.wustl.edu/~schmidt/PDF/reactor-siemens.pdf http://tutorials.jenkov.com/java-nio/selectors.html https://www.ibm.com/developerworks/java/library/j-jtp02225/ http://blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/ http://lmax-exchange.github.io/disruptor/ https://github.com/codepitbull/lockperformance

top related