SlideShare a Scribd company logo
Everything You Wanted to
Know
About Writing Async,
Concurrent HTTP Apps in Java
Agenda
• Mostly this:
Agenda
• And this:
Agenda
• And this:
About your speaker
linkd.in/jbaruch
stackoverflow.com/users/402053/jbaruch
What Frog?
What Frog?
What Frog?
What Frog?
Presentation: Everything you wanted to know about writing async, high-concurrency HTTP applications in Java, but were afraid to ask
Presentation: Everything you wanted to know about writing async, high-concurrency HTTP applications in Java, but were afraid to ask
Requirements
– parallel file Downloads
– Parallel file parts
– interrupt/pause/resume
– Progress events
– Checksums caching
First Association for “concurrent
downloader”
Presentation: Everything you wanted to know about writing async, high-concurrency HTTP applications in Java, but were afraid to ask
Lucky day: Download manager
written in Java!
Presentation: Everything you wanted to know about writing async, high-concurrency HTTP applications in Java, but were afraid to ask
Let’s look if we can use it!
1. No traceable license
2. No website or docs
3. No traceable sources
4. It’s an app, not a lib
Presentation: Everything you wanted to know about writing async, high-concurrency HTTP applications in Java, but were afraid to ask
Presentation: Everything you wanted to know about writing async, high-concurrency HTTP applications in Java, but were afraid to ask
Java.net.urlconnection
1. Memory wasteful (buffering)
2. Minimal API
3. Blocking streams
Presentation: Everything you wanted to know about writing async, high-concurrency HTTP applications in Java, but were afraid to ask
What we’re looking for
1. Async/non-blocking
2. Event callbacks
What is IT going to take
1. Reactor
2. nio
Welcome to the reactor
– pattern for lightweight concurrency
– Event driven
– Threads reuse
– Uses non-blocking Io
Original pattern
http://www.dre.vanderbilt.edu/~schmidt/PDF/reactor-siemens.pdf
Guess the author by the
diagram
http://gee.cs.oswego.edu/dl/cpjslides/nio.pdf
In Java, Reactor
means NIO
Selector as a multiplexer
Java version - Registering
SocketChannel channel= SocketChannel.open();
socketChannel.connect(new
InetSocketAddress("http://remote.com", 80));
...
Selector selector = Selector.open();
channel.configureBlocking(false);
SelectionKey k = channel.register(selector,
SelectionKey.OP_READ);
k.attach(handler);
Java version - Dispatcher
while (!Thread.interrupted()) {
selector.select();
Set selected = selector.selectedKeys();
Iterator it = selected.iterator();
while (it.hasNext())
SelectionKey k = (SelectionKey)(it.next();
((Runnable)(k.attachment())).run();
selected.clear();
}
Handling reactor events is complex
– Need to maintain state
– Buffering – assembling chunks
– Coordinating async events
Presentation: Everything you wanted to know about writing async, high-concurrency HTTP applications in Java, but were afraid to ask
Nio libraries
– Most of them are servers
–Netty, grizzly, etc.
– Apache Mina
– Apache HTTP components asyncclient
– Ning http client
Nio libraries
– Most of them are servers
–Netty, grizzly, etc.
– Apache Mina
– Apache HTTP components asyncclient
– Ning http client
– Client and server nio library
– Evolved from netty
– Latest release October 2012
Presentation: Everything you wanted to know about writing async, high-concurrency HTTP applications in Java, but were afraid to ask
Nio libraries
– Most of them are servers
–Netty, grizzly, etc
– Apache Mina
– Apache HTTP components asyncclient
– Ning http client
Presentation: Everything you wanted to know about writing async, high-concurrency HTTP applications in Java, but were afraid to ask
Ning’s async http client
Presentation: Everything you wanted to know about writing async, high-concurrency HTTP applications in Java, but were afraid to ask
Presentation: Everything you wanted to know about writing async, high-concurrency HTTP applications in Java, but were afraid to ask
Here it is!
try (AsyncHttpClient asyncHttpClient = new AsyncHttpClient()) {
ListenableFuture<Response> future = asyncHttpClient.prepareGet(
"http://oss.jfrog.org/api/system/ping").execute(
new AsyncCompletionHandler<Response>() {
@Override
public Response onCompleted(Response response) {
System.out.println(response.getResponseBody());
return response;
}
@Override
public void onThrowable(Throwable t) {
t.printStackTrace();
}
});
Response response = future.get();
}
Presentation: Everything you wanted to know about writing async, high-concurrency HTTP applications in Java, but were afraid to ask
HAC Concepts
– Request producer
– Response consumer
try (CloseableHttpAsyncClient asyncHttpClient = HttpAsyncClients.createDefault()) {
asyncHttpClient.start();
Future<HttpResponse> future = asyncHttpClient.execute(
HttpAsyncMethods.createGet("http://oss.jfrog.org/api/system/ping"),
new AsyncByteConsumer<HttpResponse>() {
@Override
protected void onResponseReceived(final HttpResponse response) {
System.out.println(response.getStatusLine().getReasonPhrase());
}
@Override
protected void onByteReceived(final CharBuffer buf, final IOControl ioctrl) { }
@Override
protected void releaseResources() { }
@Override
protected HttpResponse buildResult(final HttpContext context) {
return (HttpResponse) context.getAttribute("http.response");
}
}, null);
HttpResponse response = future.get();
}
Presentation: Everything you wanted to know about writing async, high-concurrency HTTP applications in Java, but were afraid to ask
Choosing between ning and http
asyncclient
"All problems in computer science can
be solved by another level of
indirection"
David
Wheeler
public interface HttpProviderDownloadHandler {
void onResponseReceived(int statusCode, Map<String, List<String>> headers);
boolean onBytesReceived(ByteBuffer buf);
void onFailed(Throwable error);
void onCanceled();
void onCompleted();
}
Head to head
Feature/Library Ning client Http Async Client
Maturity Good Very new (early 2014)
Download cancelation Easy With bugs
Progress hooks Events not granular
enough
Just use onByteReceived()
Documentation A bit sparse Minimal
Server-side counterpart None, client only org.apache.httpcomponents
httpcore-nio
Performance?
0
100
200
300
400
500
600
700
800
900
Small file Medium file Large file
Ning
AHAC
http://blogs.atlassian.com/2013/07/http-client-performance-io/
Rfc2616: a universe of its own
Presentation: Everything you wanted to know about writing async, high-concurrency HTTP applications in Java, but were afraid to ask
Confused?
Just read some stackoverflow
(and improve your rep as you go)
And that one for
discovering that
range header is
lost on redirect
Question!
What should be
content-length
when using
compression?
Presentation: Everything you wanted to know about writing async, high-concurrency HTTP applications in Java, but were afraid to ask
Presentation: Everything you wanted to know about writing async, high-concurrency HTTP applications in Java, but were afraid to ask
https://github.com/http2/http2-spec/issues/46
Question!
Why when redirected to CDN
all the chunks start from zero?
HttpAsyncClientBuilder builder = HttpAsyncClients.custom();
// add redirect strategy that copies "range" headers, if exist
builder.setRedirectStrategy(new DefaultRedirectStrategy() {
@Override
public HttpUriRequest getRedirect(HttpRequest request, HttpResponse response,
HttpContext context)
HttpUriRequest redirectRequest = super.getRedirect(request, response, context);
// copy "Range" headers, if exist
Header[] rangeHeaders = request.getHeaders(HttpHeaders.RANGE);
if (rangeHeaders != null) {
for (Header header : rangeHeaders) {
redirectRequest.addHeader(header);
}
}
return redirectRequest;
}});
Question!
How many simultaneous
connections should I open?
Presentation: Everything you wanted to know about writing async, high-concurrency HTTP applications in Java, but were afraid to ask
Presentation: Everything you wanted to know about writing async, high-concurrency HTTP applications in Java, but were afraid to ask
Presentation: Everything you wanted to know about writing async, high-concurrency HTTP applications in Java, but were afraid to ask
Presentation: Everything you wanted to know about writing async, high-concurrency HTTP applications in Java, but were afraid to ask
Question!
What’s wrong
with the
following
code?
public static String encodeUrl(String urlStr) {
URLEncoder.encode(urlStr, "UTF-8");
...
}
Decoded URLs cannot be
re-encoded to the same form
http://example.com/?query=a&b==c
Cannot be decoded back after it was
encoded:
http://example.com/?query=a%26b==c
Don’t use java.net.URLEncoder
“Utility class for HTML form encoding.
This class contains static methods for
converting a String to the
application/x-www-form-
urlencoded MIME format.
For more information about HTML
form encoding, consult the HTML
specification.”
AHC Alternatives
Presentation: Everything you wanted to know about writing async, high-concurrency HTTP applications in Java, but were afraid to ask
Question!
How do I
close a
socket
correctly?
How hard can it be to close a
socket?
The art of socket closing
http://www.safaribooksonline.com/library/view/http-the-definitive/1565925092/ch04s07.html
Half-closed: no new customers
Never block in socket close()
• The other side expects you
to clean up nicely
• It will give up on time out
• You will wait (forever)
Presentation: Everything you wanted to know about writing async, high-concurrency HTTP applications in Java, but were afraid to ask
Remember?
Question!
How can I write
file parts
concurrently?
– Write to separate files, combine on finish
– Write to same file, seeking to the right
position
Presentation: Everything you wanted to know about writing async, high-concurrency HTTP applications in Java, but were afraid to ask
Presentation: Everything you wanted to know about writing async, high-concurrency HTTP applications in Java, but were afraid to ask
Use FileChannel
• Implements SeekableByteChannel
java.nio.channels.FileChannel#write(
java.nio.ByteBuffer src, long position)
Download progress tracking
• PersistentFileProgressInfo
– Save the total size, sha1, number of parts
– State of each part (offset, size, completed...)
FileProgressInfo FilePartProgressInfo
*
File Locking
File locking Levels
– VM level
– OS level
OS level File locking
• Multiple downloader instances writing to
the same file
• Needed for writing:
– Partial download file
– Persistent download progress
FileLock lock = fileChannel.tryLock();
//Non-shared: (0L, Long.MAX_VALUE, false)
if (lock == null) {
throw new OverlappingFileLockException();
}
return lock;
}
OS Level File Locking -
Exclusive
private FileLock lock(FileChannel fileChannel) throws IOException {
FileLock lock = fileChannel.tryLock(Long.MAX_VALUE - 1, 1, false);
if (lock == null) {
throw new OverlappingFileLockException();
}
return lock;
}
OS Level File Locking –
Advisory exclusive
WTF?!
VM Level File Locking
VM Level File Locking
– Prevent same VM threads writing to the file when we
started closing it
– Closing sequence:
– Release file locks
– Close channels
– Rename a file to it's final name (remove .part)
– Erase progress info
VM Level File Locking
ReentrantReadWriteLock.ReadLock writeToFileLock = rwl.readLock();
ReentrantReadWriteLock.WriteLock closeFileLock = rwl.writeLock();
public void close() throws IOException {
this.closeFileLock.lock();
}
public int write(int partIndex, ByteBuffer buf) {
if (!this.writeToFileLock.tryLock()) {
throw new IllegalStateException("File is being closed");
}
...
}
What’s next?
http/2
– Mostly standardizing Google's spdy
– Header compression
– multiplexing
– Prioritization
– Server push
– On the way clear some stuff
– E.g. compressed content length
Ease the load
Links!
• RTFM: RFC 2616
• Ultimate book: HTTP: The Definitive
Guide
– Amazon
– Safari
• Reactor pattern
• Doug Lea on NIO
No, Thank you!

More Related Content

What's hot (20)

PPTX
A complete guide to Node.js
Prabin Silwal
 
PDF
Programming language for the cloud infrastructure
Yaroslav Muravskyi
 
PDF
Tornado in Depth
Òscar Vilaplana
 
PDF
Reactive server with netty
Dmitriy Dumanskiy
 
PDF
VCL template abstraction model and automated deployments to Fastly
Fastly
 
PDF
LogStash - Yes, logging can be awesome
James Turnbull
 
PDF
An Introduction to Tornado
Gavin Roy
 
PDF
Tornadoweb
Osman Yuksel
 
PPTX
Python, async web frameworks, and MongoDB
emptysquare
 
PDF
Introduction tomcat7 servlet3
JavaEE Trainers
 
PDF
Beyond Breakpoints: A Tour of Dynamic Analysis
Fastly
 
KEY
PyCon US 2012 - State of WSGI 2
Graham Dumpleton
 
KEY
PyCon US 2012 - Web Server Bottlenecks and Performance Tuning
Graham Dumpleton
 
PDF
I can't believe it's not a queue: Kafka and Spring
Joe Kutner
 
ZIP
Nginx + Tornado = 17k req/s
moret1979
 
PPTX
Tornado - different Web programming
Dima Malenko
 
PDF
Nodejs Explained with Examples
Gabriele Lana
 
PPTX
How NOT to write in Node.js
Piotr Pelczar
 
PPTX
Tornado web
kurtiss
 
PPTX
Node.js - Advanced Basics
Doug Jones
 
A complete guide to Node.js
Prabin Silwal
 
Programming language for the cloud infrastructure
Yaroslav Muravskyi
 
Tornado in Depth
Òscar Vilaplana
 
Reactive server with netty
Dmitriy Dumanskiy
 
VCL template abstraction model and automated deployments to Fastly
Fastly
 
LogStash - Yes, logging can be awesome
James Turnbull
 
An Introduction to Tornado
Gavin Roy
 
Tornadoweb
Osman Yuksel
 
Python, async web frameworks, and MongoDB
emptysquare
 
Introduction tomcat7 servlet3
JavaEE Trainers
 
Beyond Breakpoints: A Tour of Dynamic Analysis
Fastly
 
PyCon US 2012 - State of WSGI 2
Graham Dumpleton
 
PyCon US 2012 - Web Server Bottlenecks and Performance Tuning
Graham Dumpleton
 
I can't believe it's not a queue: Kafka and Spring
Joe Kutner
 
Nginx + Tornado = 17k req/s
moret1979
 
Tornado - different Web programming
Dima Malenko
 
Nodejs Explained with Examples
Gabriele Lana
 
How NOT to write in Node.js
Piotr Pelczar
 
Tornado web
kurtiss
 
Node.js - Advanced Basics
Doug Jones
 

Similar to Presentation: Everything you wanted to know about writing async, high-concurrency HTTP applications in Java, but were afraid to ask (20)

PPTX
Async programming and python
Chetan Giridhar
 
PPT
JS everywhere 2011
Oleg Podsechin
 
PDF
Introduction to Apache Beam
Jean-Baptiste Onofré
 
PDF
Introduction to Node.js
Richard Lee
 
PDF
Logging for Production Systems in The Container Era
Sadayuki Furuhashi
 
PPTX
Binary Studio Academy: Concurrency in C# 5.0
Binary Studio
 
PDF
Webscraping with asyncio
Jose Manuel Ortega Candel
 
PPTX
Node.js Workshop - Sela SDP 2015
Nir Noy
 
PDF
Infinit filesystem, Reactor reloaded
Infinit
 
PDF
HOW TO DEAL WITH BLOCKING CODE WITHIN ASYNCIO EVENT LOOP
Mykola Novik
 
PPT
nodejs_at_a_glance, understanding java script
mohammedarshadhussai4
 
PPTX
introduction to node.js
orkaplan
 
PPT
nodejs_at_a_glance.ppt
WalaSidhom1
 
PPT
Node.js: CAMTA Presentation
Rob Tweed
 
KEY
Node.js - A practical introduction (v2)
Felix Geisendörfer
 
PPT
AsyncIO To Speed Up Your Crawler
Linggar Primahastoko
 
PDF
Service workers
jungkees
 
ODP
Asynchronous I/O in NodeJS - new standard or challenges?
Dinh Pham
 
PDF
What`s new in Java 7
Georgian Micsa
 
PPSX
Async-await best practices in 10 minutes
Paulo Morgado
 
Async programming and python
Chetan Giridhar
 
JS everywhere 2011
Oleg Podsechin
 
Introduction to Apache Beam
Jean-Baptiste Onofré
 
Introduction to Node.js
Richard Lee
 
Logging for Production Systems in The Container Era
Sadayuki Furuhashi
 
Binary Studio Academy: Concurrency in C# 5.0
Binary Studio
 
Webscraping with asyncio
Jose Manuel Ortega Candel
 
Node.js Workshop - Sela SDP 2015
Nir Noy
 
Infinit filesystem, Reactor reloaded
Infinit
 
HOW TO DEAL WITH BLOCKING CODE WITHIN ASYNCIO EVENT LOOP
Mykola Novik
 
nodejs_at_a_glance, understanding java script
mohammedarshadhussai4
 
introduction to node.js
orkaplan
 
nodejs_at_a_glance.ppt
WalaSidhom1
 
Node.js: CAMTA Presentation
Rob Tweed
 
Node.js - A practical introduction (v2)
Felix Geisendörfer
 
AsyncIO To Speed Up Your Crawler
Linggar Primahastoko
 
Service workers
jungkees
 
Asynchronous I/O in NodeJS - new standard or challenges?
Dinh Pham
 
What`s new in Java 7
Georgian Micsa
 
Async-await best practices in 10 minutes
Paulo Morgado
 
Ad

More from Baruch Sadogursky (20)

PDF
DevOps Patterns & Antipatterns for Continuous Software Updates @ NADOG April ...
Baruch Sadogursky
 
PDF
DevOps Patterns & Antipatterns for Continuous Software Updates @ DevOps.com A...
Baruch Sadogursky
 
PDF
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Oracle Code NY...
Baruch Sadogursky
 
PDF
Data driven devops as presented at QCon London 2018
Baruch Sadogursky
 
PDF
A Research Study Into DevOps Bottlenecks as presented at Oracle Code LA 2018
Baruch Sadogursky
 
PDF
Java Puzzlers NG S03 a DevNexus 2018
Baruch Sadogursky
 
PDF
Where the Helm are your binaries? as presented at Canada Kubernetes Meetups
Baruch Sadogursky
 
PDF
Data driven devops as presented at Codemash 2018
Baruch Sadogursky
 
PDF
A Research Study into DevOps Bottlenecks as presented at Codemash 2018
Baruch Sadogursky
 
PPTX
Best Practices for Managing Docker Versions as presented at JavaOne 2017
Baruch Sadogursky
 
PDF
Troubleshooting & Debugging Production Microservices in Kubernetes as present...
Baruch Sadogursky
 
PDF
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Devoxx 2017
Baruch Sadogursky
 
PPTX
Amazon Alexa Skills vs Google Home Actions, the Big Java VUI Faceoff as prese...
Baruch Sadogursky
 
PDF
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at DevOps Days Be...
Baruch Sadogursky
 
PDF
Java Puzzlers NG S02: Down the Rabbit Hole as it was presented at The Pittsbu...
Baruch Sadogursky
 
PDF
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...
Baruch Sadogursky
 
PDF
Let’s Wing It: A Study in DevRel Strategy
Baruch Sadogursky
 
PDF
Log Driven First Class Customer Support at Scale
Baruch Sadogursky
 
PPTX
[Webinar] The Frog And The Butler: CI Pipelines For Modern DevOps
Baruch Sadogursky
 
PDF
Patterns and antipatterns in Docker image lifecycle as was presented at DC Do...
Baruch Sadogursky
 
DevOps Patterns & Antipatterns for Continuous Software Updates @ NADOG April ...
Baruch Sadogursky
 
DevOps Patterns & Antipatterns for Continuous Software Updates @ DevOps.com A...
Baruch Sadogursky
 
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Oracle Code NY...
Baruch Sadogursky
 
Data driven devops as presented at QCon London 2018
Baruch Sadogursky
 
A Research Study Into DevOps Bottlenecks as presented at Oracle Code LA 2018
Baruch Sadogursky
 
Java Puzzlers NG S03 a DevNexus 2018
Baruch Sadogursky
 
Where the Helm are your binaries? as presented at Canada Kubernetes Meetups
Baruch Sadogursky
 
Data driven devops as presented at Codemash 2018
Baruch Sadogursky
 
A Research Study into DevOps Bottlenecks as presented at Codemash 2018
Baruch Sadogursky
 
Best Practices for Managing Docker Versions as presented at JavaOne 2017
Baruch Sadogursky
 
Troubleshooting & Debugging Production Microservices in Kubernetes as present...
Baruch Sadogursky
 
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Devoxx 2017
Baruch Sadogursky
 
Amazon Alexa Skills vs Google Home Actions, the Big Java VUI Faceoff as prese...
Baruch Sadogursky
 
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at DevOps Days Be...
Baruch Sadogursky
 
Java Puzzlers NG S02: Down the Rabbit Hole as it was presented at The Pittsbu...
Baruch Sadogursky
 
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...
Baruch Sadogursky
 
Let’s Wing It: A Study in DevRel Strategy
Baruch Sadogursky
 
Log Driven First Class Customer Support at Scale
Baruch Sadogursky
 
[Webinar] The Frog And The Butler: CI Pipelines For Modern DevOps
Baruch Sadogursky
 
Patterns and antipatterns in Docker image lifecycle as was presented at DC Do...
Baruch Sadogursky
 
Ad

Recently uploaded (20)

PDF
“Voice Interfaces on a Budget: Building Real-time Speech Recognition on Low-c...
Edge AI and Vision Alliance
 
PDF
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
PDF
Transcript: Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
DOCX
Cryptography Quiz: test your knowledge of this important security concept.
Rajni Bhardwaj Grover
 
PDF
AI Agents in the Cloud: The Rise of Agentic Cloud Architecture
Lilly Gracia
 
PPTX
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
PPTX
The Project Compass - GDG on Campus MSIT
dscmsitkol
 
PDF
How do you fast track Agentic automation use cases discovery?
DianaGray10
 
PPTX
MuleSoft MCP Support (Model Context Protocol) and Use Case Demo
shyamraj55
 
PDF
“Computer Vision at Sea: Automated Fish Tracking for Sustainable Fishing,” a ...
Edge AI and Vision Alliance
 
PPTX
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
PDF
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
PPTX
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
PDF
UiPath DevConnect 2025: Agentic Automation Community User Group Meeting
DianaGray10
 
PDF
“NPU IP Hardware Shaped Through Software and Use-case Analysis,” a Presentati...
Edge AI and Vision Alliance
 
PDF
Peak of Data & AI Encore AI-Enhanced Workflows for the Real World
Safe Software
 
PPTX
Seamless Tech Experiences Showcasing Cross-Platform App Design.pptx
presentifyai
 
PDF
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
PDF
NLJUG Speaker academy 2025 - first session
Bert Jan Schrijver
 
PDF
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
“Voice Interfaces on a Budget: Building Real-time Speech Recognition on Low-c...
Edge AI and Vision Alliance
 
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
Transcript: Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
Cryptography Quiz: test your knowledge of this important security concept.
Rajni Bhardwaj Grover
 
AI Agents in the Cloud: The Rise of Agentic Cloud Architecture
Lilly Gracia
 
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
The Project Compass - GDG on Campus MSIT
dscmsitkol
 
How do you fast track Agentic automation use cases discovery?
DianaGray10
 
MuleSoft MCP Support (Model Context Protocol) and Use Case Demo
shyamraj55
 
“Computer Vision at Sea: Automated Fish Tracking for Sustainable Fishing,” a ...
Edge AI and Vision Alliance
 
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
UiPath DevConnect 2025: Agentic Automation Community User Group Meeting
DianaGray10
 
“NPU IP Hardware Shaped Through Software and Use-case Analysis,” a Presentati...
Edge AI and Vision Alliance
 
Peak of Data & AI Encore AI-Enhanced Workflows for the Real World
Safe Software
 
Seamless Tech Experiences Showcasing Cross-Platform App Design.pptx
presentifyai
 
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
NLJUG Speaker academy 2025 - first session
Bert Jan Schrijver
 
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 

Presentation: Everything you wanted to know about writing async, high-concurrency HTTP applications in Java, but were afraid to ask

Editor's Notes

  • #3: Things that are not simple
  • #4: Why you dont’s
  • #5: Just avoid
  • #6: CURRENT – JB NEXT - YOAV
  • #27: Events are multiplexed by a single thread dispatcher
  • #53: TODO send table to back!!!
  • #55: Hypertext Transfer Protocol -- HTTP/1.1
  • #67: RFC2616 8.1.4
  • #68: Browsers go like:
  • #87: RAC is not concurrent!
  • #94: lock beyond the end of file, so we can write while others are reading avoid OS-dependent no support for shared lock (for concurrent r/w) and fallback to exclusive + avoid OS-dependent access effect of exclusive locks (Windoze...) Allows writing and reading by knowing if someone else is writing https://community.oracle.com/message/8781694