Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Individualmente- roscados,
concurren! Servidores (TCP)
12.1 Lntroducción
El capítulo anterior Ilus. Cómo concurrenc trates más. Orientado a la conexión de
servidores funcionan. Ellos usan el sistema operatlng faclhties
para crear un subproceso para.te separa cada con- nection y a1bajo el sistema
operativo para el procesador timesHce entre los subprocesos. Este capítulo il1ustraces un
diseño ídea thal es interesti ng, pero no obv]ou: muestra cómo un servidor puede ofrecer a los
clientes la simultaneidad aparente. utilizando un solo hilo. En primer lugar, ex.amínes
la idea general. 1t :explica por qué este enfoque es factible y cuando no puede ser superior
a una aplicación usando multíple procesos o subprocesos. Segundo, ü considera cómo una
individualmente subprocesos.S erver utiliza el sistema Windows a handlc funcfüms
multíple connectitms concunencly. El ex.amplio server sigue AJgorilhm 8.5T.
La actúan por cortes de tiempo del sistema mecanismo para compartir la CPU
entre los tlrreads. y hcnce. Entre las conexiones.
Ln pract ice sin embargo, un servidor de eco seJdom depende DO
L tímeslícing. Si uno pudieron presenciar la ejecución de un servidor de eco concurrente de
cerca. Uno wou ld encontrar thal la llegada de datos a menudo controla el procesamiento. El rea
de re]ates en el flujo de datos a través de internet. Los datos llegan a[ el servidor jn
burst.s, no en una corriente constante porque el under- J ying diserete intemet
entrega los datos en paquetes. Los clientes agregar al comportamiento a ráfagas
si deciden enviar a b-cerraduras de datos para la thac resultin,g segmentos TCP cada monte
ínto un único datagrama IP. Che ca server, cada esclavo subproceso pasa la mayor parte de l ts
tiempo bloqueado en una cal1 a recv esperando la próxima ráfaga para llegar. Una vez
que lleguen los datos. El recv caJ J re& tums y el flujo esclavo ejecuta. El esclavo pide
sern:J para enviar los datos a lhe dien1 y la n llamadas recv para esperar más datos_ una
CPU que puede manejar el ]oad de muchos clíents wíthout ralentizando debe ejecutar lo
suficientemente rápido para completar el cy de receí v•ng y s.termina antes de que
los datos llegan a otro esclavo.
Por supuesto, si la cocina local se vuelve tan grande que la CPU no puede procesar
una solicitud antes de que llega otra. Lleva más tiempo compartido. El sistema operativo
cambia el pro- cessor entre ali esclavos tliat guardar datos para procesar. Para servicios
simples th.En req uire littlc processi ng para e.ach solicitud. Es muy probable que la
ejecución wm sea impulsada por la llegada de daca. A surnmarize:
Server
..,... Appiication
Rosca
En esencia, un cantar]e hilo musl servidor realice los deberes tanto de los subprocesos
de maestro y esclavo. Lt maímains un conjunto de tomas.. wílh uno socke[ en el
conjunto dependiente del bien krwwn puerto en
el que el maestro aceptaría connectíons. El otro zócalo s ín lh.e
establece ea.ch corresponden a una conexión a través de un sfave whkh wou]d atender las
peticiones. El
Server me pasa juego de socke[ descriprors como argumem ·a seiect y lamentos para activi-
Ty sobre ninguno de ellos. Cuando select devuelve. Ít pasa por detrás de una máscara que
spedfies whkh bil de la desctjptors en el juego esté listo. El servidor utiliza el orden en el
que los descriptores be- vienen preparados para decidir cómo proceder.
Para distinguir entre maestro y esclavo operaciones. a solas-threaded server utiliza el
descriptor. Si el descriptor que corresponde al maestro dle socket está listo, el servidor
realiza la misma operación el maestro wou ld perfonn: llama accepl en el socket para
obtener una nueva conexión. Lf un descriptor thal corresponde a un sla\le
zócalo .- viene listo. El servidor realiza la operación un esclavo perfonn: lt
caUs recv para obtener una solicitud. y luego respuestas i t.
146 Singly-Thtt.adcd. Sc:rvus Concumnl (TCP)
<tinclude Winsock
linclude .h>
<string.h>.
/*------------------------------------------------------------------
* Principal concurrente - 1'CP server f o :rorJ service
·--------------------------------------------------------------------
*/
Void
Principales 1 i n t .rqc, char *'argv[ ] }
{
Char s •Servicio = / * Nombre de servicio o el número de puerto
tru.ct "echo· ; sockaddr_i */
SOCKBT n msock fsin;; /* El fran dirección de un cliente */
Ñl_se
Rfds; /* Socket del servidor maestro "'/
t / * Leer el conjunto de descriptores F
Fd_aet
afds;
ile J
/* Archivo activo descripto set 1
Mt Alen: Servicio = argv [l]:
WSADATA wsdata ; Me salto
Uns:firmado int Fdndx;
Interruptor (argc ) {
Caso L!
Br-eak;
Caso 2:
I* f ran- longitud de dirección
""" /
Sec. 12. An Examp]e Sj:agly-Thrcaded ECHO S!!:rnr 147
5
Valor predeterminado:
T { errexi•uso : Tl:Prnechod rpuerto] \n 11 )
FD_zERO{&af ds ) ;
FD_sE'l' (msock, &afds ) ;
/*-----------------------------------------------------------------------
* Echo: echo un búfer de datos, returni.ng BYTE COUNT
·----------------------------------------------------------------------
*/
Int
Echo ( soc:xE'l'" f d}
{
Char Buf[EUFSIZE];
Int Ce:
12.6 Resumen
Ejecución en concurn::servidores nt a menudo es impulsada por la llegada de datos por
cortes de tiempo y no por el mecanismo del sistema operativo Linderlying. En los casos en
que el servicio requiere proceso lirde lhe;ing. Una individualmente subprocesos pueden
utilizar implementatíon UO asincrónica para administrar las conexiones
a múltiples clientes tan eficazmente como una implementación tha1
utiliza varios subprocesos o procesos.
El individual-threaded ímplementaüon desempeña las funciones de maestro
y esclavo _ \Vhen subprocesos el patrón sock.el be.comes listo. El seiver acepta una
conexión nueva. Cuando cualquier otro socket está listo, el servidor re ves una petición
y envía una respuesta. Un servidor de subprocesos exarnple
individualmente para el servicio ECHO iUustrates t.h'e ideas y muestra los detalles
programrning.
Fot" fiurther Smdy 149
EXERCISES
12.1 Realizar una prueba que eperiment lhe Ejemplo ECHO servidor puede manejar conexiones
Concurrenl..ly.
12.2 ¿ Tiene sentido utilizar el 10 lhis jmplementation discutidas en el capítulo de 1 día·
TI.ME servhielo? Por qué o why ni';'
12.3.d lbe Wíndows Rea docu mentales para averiguar 1él represeruation o.f exacta descripción e n la
lista pasan a seiec1. Wríle llle FD_SET y FD_Cl.R macros.
12.4 comparar la perfonnance de singl y-th leída y multílhreaded >erver imp lemen lat iom en un i:::ompurer con
mu lliple processon. En wha.t circumsf ances será un singly- thre-.aded ven;ión bener
perfonn que (o igual) a una versión ultithreaded m?
LLJ Lacge Suppoe un número de clientes (p.ej. 100) ; el servidor exampJe acceso en este capítulo al.
Al mismo tiempo. Exp)ain whal cada cJienc míght observar.
12..6 puede un servidor multiproceso solos nunca privar a un cliente de servicio mientras repealedly
honores solicitud:s desde otra'? Puede multiproceso ehibit implemenrntion nunca la
misma behaví o? Explai n.