Post on 10-May-2015
description
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