SlideShare a Scribd company logo
1CONFIDENTIAL
NETWORKING
IN JAVA WITH
NIO AND NETTY
KANSTANTSIN SLISENKA
JUN 1, 2017
2CONFIDENTIAL
ABOUT ME
Java Backend engineer
Speaker at Java Tech Talks, SEC Online,
CMCC Tech Talks, IT Week
I’m interested in
Complex Java backend, SOA, databases
High load, fault-tolerant, distributed systems
KANSTANTSIN SLISENKA
EPAM Systems, Lead Software Engineer
3CONFIDENTIAL
WHY IS IMPORTANT TO DIG INTO JAVA NETWORKING
Classic Java project
Tomcat + Spring + Hibernate + …
High load, latency-sensitive
Custom TCP/UDP solution
4CONFIDENTIAL
AGENDA
Blocking vs non-blocking resources1
Blocking I/O2
Non-blocking I/O3
Netty: high performance networking framework4
5CONFIDENTIAL
BLOCKING VS NON-BLOCKING RESOURCES
client
thread
read/write
response
Blocking resources
Database transactions, RPC/WS calls
blocked
6CONFIDENTIAL
BLOCKING VS NON-BLOCKING RESOURCES
client
thread
read/write
response
client
thread
read/write
nope
read/write
response
client
thread
read/write
callback with
response
read/write
nope
register
callback
Blocking resources Non-blocking resources
Database transactions, RPC/WS calls Queues, WebSockets, Non-blocking data storage
blocked
7CONFIDENTIAL
NETWORK SOCKETS
Socket is blocking API over OS and Network hardware
not a physical object
PERMANENT
KNOWN PORT
ANY UNUSED
PORT
SOCKET SOCKET Max ports = 65535
8CONFIDENTIAL
JAVA SOCKETS = BLOCKING IO
Client Server
9CONFIDENTIAL
SOCKET SERVER
LIVE CODING EXAMPLE
10CONFIDENTIAL
Server
3
2 Client 2
Client 3
Client 1
SOCKET SERVER ARCHITECTURE
no data
no data
data transfer in progress
1
Socket
Socket
SocketThread
(blocked*)
Thread
(running)
Thread
(blocked*)
*until keep alive timeout
Fixed
thread pool
Requests
queue
11CONFIDENTIAL
Server
3
2 Client 2
Client 3
Client 1
SOCKET SERVER ARCHITECTURE
no data
no data
data transfer in progress
1
Socket
Socket
SocketThread
(blocked*)
Thread
(running)
Thread
(blocked*)
Client 4
*until keep alive timeout
Fixed
thread pool
Requests
queue
new
connection
12CONFIDENTIAL
Server
3
2 Client 2
Client 3
Client 1
SOCKET SERVER ARCHITECTURE
no data
no data
data transfer in progress
1
Socket
Socket
SocketThread
(blocked*)
Thread
(running)
Thread
(blocked*)
Client 4
*until keep alive timeout
Fixed
thread pool
Requests
queue
new
connection
drop by timeout
13CONFIDENTIAL
SOCKET SERVER CONCLUSION
1. Ineffective thread utilization
– many threads in waiting/blocked state
– extra memory for stack and thread local
resources
2. Poor performance
– context switching overhead
3. Limited number of connections
– when thread pool is fully consumed
Benefits Drawbacks
1. Simple development
well known Input/OutputStream API
2. No check for partially received
messages
thread is blocked until fully reads message
14CONFIDENTIAL
IO VS NIO
IO (blocking)
Thread Thread Thread
socket socket socket
BLOCKING READ/WRITE
WAIT WAIT WAITWAIT
15CONFIDENTIAL
IO VS NIO
IO (blocking) NIO (non-blocking)
NON BLOCKING READ/WRITE
Thread
buffer buffer buffer
socket
channel
socket
channel
socket
channel
Thread Thread Thread
socket socket socket
BLOCKING READ/WRITE
WAIT WAIT WAITWAIT ALWAYS
RUNNING
NOTIFICATIONS
selector
16CONFIDENTIAL
NIO DATA SENDING
Thread
buffer buffer buffer
socket
channel
socket
channel
selector
socket
channel
17CONFIDENTIAL
NIO DATA SENDING
Thread
buffer buffer buffer
socket
channel
socket
channel
selector
socket
channel
1 WRITE READY
18CONFIDENTIAL
NIO DATA SENDING
Thread
buffer buffer buffer
socket
channel
socket
channel
selector
PUT DATA2
socket
channel
1 WRITE READY
19CONFIDENTIAL
NIO DATA SENDING
Thread
buffer buffer buffer
socket
channel
socket
channel
selector
PUT DATA2
SEND DATA3
socket
channel
1 WRITE READY
20CONFIDENTIAL
NIO DATA RECEIVING
Thread
buffer buffer buffer
socket
channel
socket
channel
selector
socket
channel
21CONFIDENTIAL
NIO DATA RECEIVING
Thread
buffer buffer buffer
socket
channel
socket
channel
selector
RECEIVE DATA1
socket
channel
22CONFIDENTIAL
NIO DATA RECEIVING
Thread
buffer buffer buffer
socket
channel
socket
channel
selector
RECEIVE DATA1
socket
channel
2 READ READY
23CONFIDENTIAL
NIO DATA RECEIVING
Thread
buffer buffer buffer
socket
channel
socket
channel
selector
GET DATA3
RECEIVE DATA1
socket
channel
2 READ READY
24CONFIDENTIAL
NIO BYTE BUFFER
POSITION LIMIT CAPACITY
0 1 2 3 4 5 6 7 8 9
Empty buffer
BYTE
ARRAY
25CONFIDENTIAL
NIO BYTE BUFFER
POSITION LIMIT CAPACITY
0 1 2 3 4 5 6 7 8 9
1 0 1 1 0
LIMIT CAPACITY
Empty buffer
Writing mode
BYTE
ARRAY
BYTE
ARRAY
POSITION
0 1 2 3 4 5 6 7 8 9
26CONFIDENTIAL
NIO BYTE BUFFER
POSITION LIMIT CAPACITY
0 1 2 3 4 5 6 7 8 9
1 0 1 1 0
LIMIT CAPACITY
1 0 1 1 0
POSITION LIMIT CAPACITY
Empty buffer
Writing mode
Reading mode
BYTE
ARRAY
BYTE
ARRAY
BYTE
ARRAY
buffer.flip()buffer.clear() POSITION
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
27CONFIDENTIAL
DIRECT BUFFERS
0 1 2 3 4 5 6 7 8
JVM Network Interface Card
0 1 2 3 4 5 0 1 2 3 4 5
Physical memory
9
Shared memory
address space
Shared memory
address space
Memory should be
continuous because
NICs are block-
oriented devices
28CONFIDENTIAL
NIO SERVER
LIVE CODING EXAMPLE
29CONFIDENTIAL
Server
BASIC NIO SERVER ARCHITECTURE
buffer
Client #2
Client #1
no data
data transfer in progress
socket
channel #3 Client #3
data transfer in progress
buffer
socket
channel #2
socket
channel #1
WORKER THREAD
SELECTOR
SELECTOR
WORKER THREAD
buffer
Business
logic
30CONFIDENTIAL
Server
BASIC NIO SERVER ARCHITECTURE
buffer
Client #2
Client #1
no data
data transfer in progress
socket
channel #3 Client #3
data transfer in progress
buffer
socket
channel #2
socket
channel #1
WORKER THREAD
SELECTOR
SELECTOR
WORKER THREAD
buffer
Business
logic
31CONFIDENTIAL
Server
BASIC NIO SERVER ARCHITECTURE
buffer
Client #2
Client #1
no data
data transfer in progress
socket
channel #3 Client #3
data transfer in progress
buffer
get ready channels
socket
channel #2
socket
channel #1
WORKER THREAD
SELECTOR
SELECTOR
WORKER THREAD
buffer
Business
logic
32CONFIDENTIAL
Server
BASIC NIO SERVER ARCHITECTURE
buffer
Client #2
Client #1
no data
data transfer in progress
socket
channel #3 Client #3
data transfer in progress
get buffer
put
read
write
get ready channels
socket
channel #2
socket
channel #1
Business
logic
WORKER THREAD
SELECTOR
SELECTOR
WORKER THREAD
buffer
33CONFIDENTIAL
Server
BASIC NIO SERVER ARCHITECTURE
new
connection
buffer
Client #2
Client #4
Client #1
no data
data transfer in progress
new connection
socket
channel #3 Client #3
data transfer in progress
get buffer
put
register in selector
read
write
get ready channels
socket
channel #2
socket
channel #1
WORKER THREAD
SELECTOR
SELECTOR
WORKER THREAD
Business
logic
buffer
34CONFIDENTIAL
CAN WE GO TO PRODUCTION WITH A SINGLE THREAD?
https://www.pinterest.com/banjolele/one-man-band/
35CONFIDENTIAL
PRODUCTION-READY NIO SERVER
new
connection
36CONFIDENTIAL
SELECTOR
PRODUCTION-READY NIO SERVER
ServerSocket
Channel
acceptor
thread
new
connection
Acceptor threads
Separate thread to not lose incoming
connections when selector threads
are overloaded
37CONFIDENTIAL
SELECTOR
SELECTOR
PRODUCTION-READY NIO SERVER
ServerSocket
Channel
selector
thread
…
acceptor
thread
Socket
Channel
SELECTOR
selector
threadSocket
Channel
SELECTOR
selector
threadSocket
Channel
new
connection
Selector threads
Multiple processing threads to
get benefit from multi core CPU
Acceptor threads
Separate thread to not lose incoming
connections when selector threads
are overloaded
38CONFIDENTIAL
SELECTOR
SELECTOR
Application
thread pools
(long running tasks)
PRODUCTION-READY NIO SERVER
ServerSocket
Channel
selector
thread
…
worker
thread
worker
thread
worker
thread
application
thread
acceptor
thread
Socket
Channel
SELECTOR
selector
threadSocket
Channel
SELECTOR
selector
threadSocket
Channel
new
connection
Selector threads
Multiple processing threads to
get benefit from multi core CPU
Acceptor threads
Separate thread to not lose incoming
connections when selector threads
are overloaded
Application threads
For long tasks (back-end, DB,
computation), to avoid blocking
of selector threads
39CONFIDENTIAL
PARTIAL MESSAGE RECEIVING PROBLEM
Message reader splits/joins data blocks into messages
Data block
Message
Message Message
Message Message Message
message
reader
Data
block
Data
block
MessageMessage
Data
block
40CONFIDENTIAL
NIO CONCLUSION
Complexity
• complex code
• learning curve for developers
• handling partially received
messages
• combining async with sync code
(need different thread groups)
Benefits Drawbacks
Single shared thread for many
connections
• less memory
• less context switching overhead
41CONFIDENTIAL
NETTY
ONE FRAMEWORK TO RULE THEM ALL
42CONFIDENTIAL
NETTY: JAVA NETWORK FRAMEWORK
Some projects using Netty
43CONFIDENTIAL
NETTY SERVER ARCHITECTURE
Network
44CONFIDENTIAL
transport
Boss
EventLoopGroup
NIO
NETTY SERVER ARCHITECTURE
Network
Socket
Native JNI
Thread pool for
new connections
45CONFIDENTIAL
transport
Boss
EventLoopGroup
channel
channel pipeline
Worker EventLoopGroup EventExecutorGroup
NIO
NETTY SERVER ARCHITECTURE
Inbound
Handler
Inbound
Handler
Inbound
Handler
Outbound
Handler
Outbound
Handler
Outbound
Handler
Network
Socket
Native JNI
Separate thread pool
for blocking logic
I/O thread pool
For non-blocking logic
Thread pool for
new connections
46CONFIDENTIAL
channel
channel pipeline
NETTY HANDLERS
SSL
Handler
encrypted
encrypted
47CONFIDENTIAL
channel
channel pipeline
NETTY HANDLERS
HTTP
Request
Decoder
SSL
Handler
encrypted
encrypted
bytes
48CONFIDENTIAL
channel
channel pipeline
NETTY HANDLERS
HTTP
Request
Decoder
HTTP
Object
Aggregator
SSL
Handler
encrypted
encrypted
bytes
http
messages
buffer
49CONFIDENTIAL
channel
channel pipeline
NETTY HANDLERS
HTTP
Request
Decoder
HTTP
Object
Aggregator
SSL
Handler
encrypted
encrypted
bytes
http
messages Your
Business
Logic
Handler
full http
messages
buffer
50CONFIDENTIAL
channel
channel pipeline
NETTY HANDLERS
HTTP
Request
Decoder
HTTP
Object
Aggregator
HTTP
Request
Encoder
SSL
Handler
encrypted
encrypted
bytes
http
messages
bytes
Your
Business
Logic
Handler
full http
messages
buffer
full http
messages
51CONFIDENTIAL
NETTY SERVER
LIVE CODING EXAMPLE
52CONFIDENTIAL
WHAT IS FASTER: IO OR NIO?
53CONFIDENTIAL
WHAT IS FASTER: IO OR NIO?
May be yes, may be not *
?
?
?
?
NIO is faster
Context switching is
very slow
Threads take up too
much memory
Thread synchronization
will kill you
54CONFIDENTIAL
WHAT IS FASTER: IO OR NIO?
May be yes, may be not *
* Always point to holy-wars, see
www.mailinator.com/tymaPaulMultithreaded.pdf
?
?
?
Context switching is
very slow
Threads take up too
much memory
Thread synchronization
will kill you
IO is 25-30% faster
(see benchmark*)
NIO is faster
55CONFIDENTIAL
WHAT IS FASTER: IO OR NIO?
May be yes, may be not *
* Always point to holy-wars, see
www.mailinator.com/tymaPaulMultithreaded.pdf
?
?
Context switching is
very slow
Threads take up too
much memory
Thread synchronization
will kill you
IO is 25-30% faster
(see benchmark*)
NIO is faster
New POSIX library in Linux > 2.6
IDLE thread costs almost zero
Context switching is much much faster
56CONFIDENTIAL
WHAT IS FASTER: IO OR NIO?
May be yes, may be not *
* Always point to holy-wars, see
www.mailinator.com/tymaPaulMultithreaded.pdf
?
Context switching is
very slow
Threads take up too
much memory
Thread synchronization
will kill you
IO is 25-30% faster
(see benchmark*)
NIO is faster
New POSIX library in Linux > 2.6
IDLE thread costs almost zero
Context switching is much much faster
Don’t overuse thread-local objects!
57CONFIDENTIAL
WHAT IS FASTER: IO OR NIO?
May be yes, may be not *
* Always point to holy-wars, see
www.mailinator.com/tymaPaulMultithreaded.pdf
Context switching is
very slow
Threads take up too
much memory
Thread synchronization
will kill you
IO is 25-30% faster
(see benchmark*)
NIO is faster
New POSIX library in Linux > 2.6
IDLE thread costs almost zero
Context switching is much much faster
Don’t overuse thread-local objects!
Use non-blocking data structures
58CONFIDENTIAL
CONCLUSION
• Huge number of connections
• Medium or slow data rate per connection
• Asynchronous world (event-based)
• Non blocking database
• Queues
• Web-sockets
• Callbacks, listeners
• Data streaming
• Don’t use standard NIO, use frameworks like Netty
• Highly skilled team because of complex code
Use sockets* Use NIO*
*Not a strict rule, always point to holy-wars
• Small number of connections
• Huge data rate per connection
• Synchronous world (procedure-based)
• Classic enterprise applications
• Request-response protocols
• Blocking database
• Blocking RPC or web-service calls
• Bottleneck is not server, but blocking resource
• Make servers stateless and scale horizontally
59CONFIDENTIAL
Java Network
Programming, 4’th
edition
O’REILLY
Elliotte Rusty Harold
BUY A BOOK, MAKE THEM RICH
Netty in Action
Manning
Norman Maurer
Java NIO
O’REILLY
Ron Hitchens
• Code examples: github.com/kslisenko/java-networking
• NIO performance: www.mailinator.com/tymaPaulMultithreaded.pdf
• NIO tutorial: tutorials.jenkov.com/java-nio/index.html
• ITT 2015 - Heinz Kabutz - The Multi-threading, Non Blocking IO:
youtube.com/watch?v=uKc0Gx_lPsg
• Netty - One Framework to rule them all by Norman Maurer:
youtube.com/watch?v=DKJ0w30M0vg
• Scalable IO in Java: http://gee.cs.oswego.edu/dl/cpjslides/nio.pdf
60CONFIDENTIAL
THANK YOU! QUESTIONS?
kslisenko@gmail.com
kslisenko
linkedin.com/in/kslisenko/
Konstantin Slisenko
kanstantsin_slisenka@epam.com

More Related Content

What's hot (20)

PPTX
Real Time UI with Apache Kafka Streaming Analytics of Fast Data and Server Push
Lucas Jellema
 
PPTX
Project Reactor By Example
Denny Abraham Cheriyan
 
PPTX
Reactive programming intro
Ahmed Ehab AbdulAziz
 
PPTX
Introduction to Apache Kafka
Jeff Holoman
 
PPTX
kafka
Amikam Snir
 
PDF
KafkaConsumer - Decoupling Consumption and Processing for Better Resource Uti...
confluent
 
PDF
Fundamentals of Apache Kafka
Chhavi Parasher
 
PPTX
Apache Kafka
Saroj Panyasrivanit
 
PDF
웹 프론트엔드 개발자의 얕고 넓은 Rx 이야기
Kim Hunmin
 
PPTX
Introduction to gRPC
Chandresh Pancholi
 
PPTX
Introduction to Apache Kafka
AIMDek Technologies
 
PDF
Understanding Reactive Programming
Andres Almiray
 
PPTX
Kafka 101
Clement Demonchy
 
PDF
Introduction to AMQP Messaging with RabbitMQ
Dmitriy Samovskiy
 
PPTX
Kafka replication apachecon_2013
Jun Rao
 
PDF
Introduction and Overview of Apache Kafka, TriHUG July 23, 2013
mumrah
 
PDF
Apache kafka performance(latency)_benchmark_v0.3
SANG WON PARK
 
PPTX
A visual introduction to Apache Kafka
Paul Brebner
 
PDF
gRPC Overview
Varun Talwar
 
PPTX
Apache Kafka Best Practices
DataWorks Summit/Hadoop Summit
 
Real Time UI with Apache Kafka Streaming Analytics of Fast Data and Server Push
Lucas Jellema
 
Project Reactor By Example
Denny Abraham Cheriyan
 
Reactive programming intro
Ahmed Ehab AbdulAziz
 
Introduction to Apache Kafka
Jeff Holoman
 
KafkaConsumer - Decoupling Consumption and Processing for Better Resource Uti...
confluent
 
Fundamentals of Apache Kafka
Chhavi Parasher
 
Apache Kafka
Saroj Panyasrivanit
 
웹 프론트엔드 개발자의 얕고 넓은 Rx 이야기
Kim Hunmin
 
Introduction to gRPC
Chandresh Pancholi
 
Introduction to Apache Kafka
AIMDek Technologies
 
Understanding Reactive Programming
Andres Almiray
 
Kafka 101
Clement Demonchy
 
Introduction to AMQP Messaging with RabbitMQ
Dmitriy Samovskiy
 
Kafka replication apachecon_2013
Jun Rao
 
Introduction and Overview of Apache Kafka, TriHUG July 23, 2013
mumrah
 
Apache kafka performance(latency)_benchmark_v0.3
SANG WON PARK
 
A visual introduction to Apache Kafka
Paul Brebner
 
gRPC Overview
Varun Talwar
 
Apache Kafka Best Practices
DataWorks Summit/Hadoop Summit
 

Similar to Networking in Java with NIO and Netty (20)

PPTX
Java nio ( new io )
Jemin Patel
 
PDF
Asynchronous, Event-driven Network Application Development with Netty
Ersin Er
 
PDF
How a network connection is created A network connection is initi.pdf
arccreation001
 
PPT
Java Networking
Sunil OS
 
PDF
Of the variedtypes of IPC, sockets arout and awaythe foremostcommon..pdf
anuradhasilks
 
DOCX
Mail Server Project Report
Kavita Sharma
 
DOCX
Running Head CLIENT SERVER AUTHENTICATIONHANDLING CONCURRENT CL.docx
joellemurphey
 
PDF
Thousands of Threads and Blocking I/O
George Cao
 
PDF
JJUG CCC 2018 Spring - I-7 (俺が)はじめての Netty
Shinya Mochida
 
PPT
many many many many server types all there
Meenakshi Raheja
 
PPTX
Client server chat application
Samsil Arefin
 
PDF
Web chatting application project report management system.pdf
Kamal Acharya
 
PPTX
C/S archtecture including basic networking
abhinav2727
 
PDF
Netty @Apple: Large Scale Deployment/Connectivity
C4Media
 
PPT
Lan chat system
Wipro
 
PPTX
Network Programming-Python-13-8-2023.pptx
ssuser23035c
 
DOCX
OverviewIn this project you will implement a server for the Purdue.docx
loganta
 
PPT
Networking Core Concept
Rays Technologies
 
DOCX
Final networks lab manual
Jaya Prasanna
 
PDF
17-Networking.pdf
sophia763824
 
Java nio ( new io )
Jemin Patel
 
Asynchronous, Event-driven Network Application Development with Netty
Ersin Er
 
How a network connection is created A network connection is initi.pdf
arccreation001
 
Java Networking
Sunil OS
 
Of the variedtypes of IPC, sockets arout and awaythe foremostcommon..pdf
anuradhasilks
 
Mail Server Project Report
Kavita Sharma
 
Running Head CLIENT SERVER AUTHENTICATIONHANDLING CONCURRENT CL.docx
joellemurphey
 
Thousands of Threads and Blocking I/O
George Cao
 
JJUG CCC 2018 Spring - I-7 (俺が)はじめての Netty
Shinya Mochida
 
many many many many server types all there
Meenakshi Raheja
 
Client server chat application
Samsil Arefin
 
Web chatting application project report management system.pdf
Kamal Acharya
 
C/S archtecture including basic networking
abhinav2727
 
Netty @Apple: Large Scale Deployment/Connectivity
C4Media
 
Lan chat system
Wipro
 
Network Programming-Python-13-8-2023.pptx
ssuser23035c
 
OverviewIn this project you will implement a server for the Purdue.docx
loganta
 
Networking Core Concept
Rays Technologies
 
Final networks lab manual
Jaya Prasanna
 
17-Networking.pdf
sophia763824
 
Ad

More from Constantine Slisenka (11)

PDF
Unlocking the secrets of successful architects: what skills and traits do you...
Constantine Slisenka
 
PPTX
Lyft talks #4 Orchestrating big data and ML pipelines at Lyft
Constantine Slisenka
 
PDF
What does it take to be architect (for Cjicago JUG)
Constantine Slisenka
 
PDF
What does it take to be an architect
Constantine Slisenka
 
PDF
VoxxedDays Minsk - Building scalable WebSocket backend
Constantine Slisenka
 
PDF
Building scalable web socket backend
Constantine Slisenka
 
PDF
Latency tracing in distributed Java applications
Constantine Slisenka
 
PDF
Distributed transactions in SOA and Microservices
Constantine Slisenka
 
PPTX
Best practices of building data streaming API
Constantine Slisenka
 
PDF
Database transaction isolation and locking in Java
Constantine Slisenka
 
PDF
Profiling distributed Java applications
Constantine Slisenka
 
Unlocking the secrets of successful architects: what skills and traits do you...
Constantine Slisenka
 
Lyft talks #4 Orchestrating big data and ML pipelines at Lyft
Constantine Slisenka
 
What does it take to be architect (for Cjicago JUG)
Constantine Slisenka
 
What does it take to be an architect
Constantine Slisenka
 
VoxxedDays Minsk - Building scalable WebSocket backend
Constantine Slisenka
 
Building scalable web socket backend
Constantine Slisenka
 
Latency tracing in distributed Java applications
Constantine Slisenka
 
Distributed transactions in SOA and Microservices
Constantine Slisenka
 
Best practices of building data streaming API
Constantine Slisenka
 
Database transaction isolation and locking in Java
Constantine Slisenka
 
Profiling distributed Java applications
Constantine Slisenka
 
Ad

Recently uploaded (20)

PPTX
Empowering Asian Contributions: The Rise of Regional User Groups in Open Sour...
Shane Coughlan
 
PPTX
OpenChain @ OSS NA - In From the Cold: Open Source as Part of Mainstream Soft...
Shane Coughlan
 
PDF
Build It, Buy It, or Already Got It? Make Smarter Martech Decisions
bbedford2
 
PPTX
Transforming Mining & Engineering Operations with Odoo ERP | Streamline Proje...
SatishKumar2651
 
PPTX
Why Businesses Are Switching to Open Source Alternatives to Crystal Reports.pptx
Varsha Nayak
 
PPTX
In From the Cold: Open Source as Part of Mainstream Software Asset Management
Shane Coughlan
 
PPTX
Change Common Properties in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PDF
HiHelloHR – Simplify HR Operations for Modern Workplaces
HiHelloHR
 
PDF
iTop VPN With Crack Lifetime Activation Key-CODE
utfefguu
 
PDF
Digger Solo: Semantic search and maps for your local files
seanpedersen96
 
PPTX
Migrating Millions of Users with Debezium, Apache Kafka, and an Acyclic Synch...
MD Sayem Ahmed
 
PDF
Online Queue Management System for Public Service Offices in Nepal [Focused i...
Rishab Acharya
 
PPTX
Home Care Tools: Benefits, features and more
Third Rock Techkno
 
PPTX
ChiSquare Procedure in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PDF
IDM Crack with Internet Download Manager 6.42 Build 43 with Patch Latest 2025
bashirkhan333g
 
PDF
Revenue streams of the Wazirx clone script.pdf
aaronjeffray
 
PPTX
AEM User Group: India Chapter Kickoff Meeting
jennaf3
 
PDF
The 5 Reasons for IT Maintenance - Arna Softech
Arna Softech
 
PDF
Alexander Marshalov - How to use AI Assistants with your Monitoring system Q2...
VictoriaMetrics
 
PDF
Odoo CRM vs Zoho CRM: Honest Comparison 2025
Odiware Technologies Private Limited
 
Empowering Asian Contributions: The Rise of Regional User Groups in Open Sour...
Shane Coughlan
 
OpenChain @ OSS NA - In From the Cold: Open Source as Part of Mainstream Soft...
Shane Coughlan
 
Build It, Buy It, or Already Got It? Make Smarter Martech Decisions
bbedford2
 
Transforming Mining & Engineering Operations with Odoo ERP | Streamline Proje...
SatishKumar2651
 
Why Businesses Are Switching to Open Source Alternatives to Crystal Reports.pptx
Varsha Nayak
 
In From the Cold: Open Source as Part of Mainstream Software Asset Management
Shane Coughlan
 
Change Common Properties in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
HiHelloHR – Simplify HR Operations for Modern Workplaces
HiHelloHR
 
iTop VPN With Crack Lifetime Activation Key-CODE
utfefguu
 
Digger Solo: Semantic search and maps for your local files
seanpedersen96
 
Migrating Millions of Users with Debezium, Apache Kafka, and an Acyclic Synch...
MD Sayem Ahmed
 
Online Queue Management System for Public Service Offices in Nepal [Focused i...
Rishab Acharya
 
Home Care Tools: Benefits, features and more
Third Rock Techkno
 
ChiSquare Procedure in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
IDM Crack with Internet Download Manager 6.42 Build 43 with Patch Latest 2025
bashirkhan333g
 
Revenue streams of the Wazirx clone script.pdf
aaronjeffray
 
AEM User Group: India Chapter Kickoff Meeting
jennaf3
 
The 5 Reasons for IT Maintenance - Arna Softech
Arna Softech
 
Alexander Marshalov - How to use AI Assistants with your Monitoring system Q2...
VictoriaMetrics
 
Odoo CRM vs Zoho CRM: Honest Comparison 2025
Odiware Technologies Private Limited
 

Networking in Java with NIO and Netty