Server Design Alternatives - A Comprehensive Overview

 
Today’s topic
 
Other server design alternatives
Preforked servers
Threaded servers
Prethreaded servers
 
Sequential server
socket()
bind()
listen()
accept()
read()
write()
read()
close()
 
Handle one
connection at
a time
socket()
bind()
listen()
accept()
read()
write()
read()
close()
socket()
bind()
listen()
Loop forever
accept()
fork
Close
accepted
socket
Close listen
socket
read()
write()
read()
close()
 
Sequential server
 
Concurrent server (example2.c)
socket()
bind()
listen()
Loop forever
select
If listen socket is active 
 accept, book keeping
If data socket is active: read/write
If read returns 0, close the socket, book keeping
If standard input is active: act accordingly
 
Multiplexed server
 
Multiplexed server (example4.c):
Multiplexed server/concurrent server: which
one is more efficient?
 
Can we have the best of both worlds?
 
Preforked server:
Main limitation with the concurrent server
fork overheads.
Is context switching a big problem?
 
Removing the fork overheads
Pre-fork N processes and use them forever.
socket()
bind()
listen()
accept()
read()
write()
close()
 
Sequential server
 
Prefork server (example5.c)
socket()
bind()
listen()
N Fork()’s
accept()
write()
close()
read()
accept()
write()
close()
read()
 
Preforked Servers
 
Accept:  It extracts  the  first   connection request  on  the  queue of pending
       connections, creates a new connected socket, and returns a new file
       descriptor referring  to  that  socket. The  newly  created socket is not in
       the listening state.  The original socket sockfd is unaffected by this call.
 
Only one will return!!
 
Preforked server:
Disadvantages
Not easy to guess the “right” number of child
processes.
Comparison to other server implementation
techniques:
Single CPU, multiple CPU’s
Concurrent, multiplex, and prefork are building
blocks for server implementation. One can use
a combination of techniques.
E.g. pre-fork N multiplexed servers.
 
IO multiplexing with threads
 
IO mutiplexing at the process level requires the
select call.
Multi-threading can achieve the same effect
Idea: use one thread to process one input stream
Multiplexing is implicit at the systems level
See echo_client_thread.cpp
getaddrinfo – a network address and service translation
method.
 
Threaded Server
 
Limitations with process-based concurrent servers
Fork is expensive
Inter-process communications are hard
Threads
Lightweight process
Crashing one thread will kill all program
See echo_server_thread.cpp
Not robust
implemented like concurrent server.
Can share data structures
 
Prethreaded Servers
 
A number of threads are precreated to
handle clients
Only one thread can be blocked on accept()
Access to accept () controlled by a mutex
See echo_server_prethread.cpp
Slide Note
Embed
Share

Exploring various server design alternatives such as preforked servers, threaded servers, prethreaded servers, sequential servers, and multiplexed servers. Discussing their implementations, efficiency, limitations, and potential combinations for optimal performance.


Uploaded on Sep 07, 2024 | 1 Views


Download Presentation

Please find below an Image/Link to download the presentation.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author. Download presentation by click this link. If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.

E N D

Presentation Transcript


  1. Todays topic Other server design alternatives Preforked servers Threaded servers Prethreaded servers

  2. Sequential server socket() bind() Handle one connection at a time listen() accept() read() write() read() close()

  3. Sequential server Concurrent server (example2.c) socket() socket() bind() bind() listen() listen() Loop forever accept() accept() fork read() Close accepted socket Close listen socket read() write() write() read() close() close() read()

  4. Multiplexed server socket() bind() listen() Loop forever select If listen socket is active accept, book keeping If data socket is active: read/write If read returns 0, close the socket, book keeping If standard input is active: act accordingly

  5. Multiplexed server (example4.c): Multiplexed server/concurrent server: which one is more efficient? Can we have the best of both worlds?

  6. Preforked server: Main limitation with the concurrent server fork overheads. Is context switching a big problem? Removing the fork overheads Pre-fork N processes and use them forever.

  7. Sequential server Prefork server (example5.c) socket() socket() bind() bind() listen() listen() N Fork() s accept() accept() read() accept() read() read() write() write() write() close() close() close()

  8. Preforked Servers Accept: It extracts the first connection request on the queue of pending connections, creates a new connected socket, and returns a new file descriptor referring to that socket. The newly created socket is not in the listening state. The original socket sockfd is unaffected by this call. Only one will return!!

  9. Preforked server: Disadvantages Not easy to guess the right number of child processes. Comparison to other server implementation techniques: Single CPU, multiple CPU s Concurrent, multiplex, and prefork are building blocks for server implementation. One can use a combination of techniques. E.g. pre-fork N multiplexed servers.

  10. IO multiplexing with threads IO mutiplexing at the process level requires the select call. Multi-threading can achieve the same effect Idea: use one thread to process one input stream Multiplexing is implicit at the systems level See echo_client_thread.cpp getaddrinfo a network address and service translation method.

  11. Threaded Server Limitations with process-based concurrent servers Fork is expensive Inter-process communications are hard Threads Lightweight process Crashing one thread will kill all program See echo_server_thread.cpp Not robust implemented like concurrent server. Can share data structures

  12. Prethreaded Servers A number of threads are precreated to handle clients Only one thread can be blocked on accept() Access to accept () controlled by a mutex See echo_server_prethread.cpp

Related


More Related Content

giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#