¿Existe realmente algo como "empujar"?

8

Una vez que escapas del ámbito de las señales eléctricas y te enfrentas al software, ¿existe realmente una arquitectura de "empuje" donde no hay encuestas periódicas?

No puedo pensar en ningún diseño en el que no esté sondeando en algún nivel. Parece que siempre es solo un nivel o dos debajo de la abstracción / API real con la que está tratando. Los sockets en el extremo receptor de la mayoría de las conexiones "push" solo sondean las solicitudes entrantes, etc.

John Cromartie
fuente
44
¿Considera que una interrupción activada por hardware es "sondeo"?
Oliver Charlesworth el
Yo diría que no. Pero, ¿qué sistemas de software pueden hacer uso de ellos (particularmente en el ámbito de las aplicaciones en red)?
John Cromartie
55
la programación de sockets y los sockets web son "push".
zzzzBov

Respuestas:

14

Creo que Windows requirió que las aplicaciones realizaran encuestas para IO hasta NT y Windows 95. Los sistemas operativos modernos de uso general prácticamente han eliminado la necesidad de realizar encuestas. Cuando su aplicación solicita leer desde un socket, la función de lectura debe realizar una llamada al núcleo del sistema operativo. El sistema operativo pone el hilo de llamada en un estado suspendido. A medida que llegan los paquetes de red, desencadenan una interrupción de hardware manejada por el sistema operativo. Si el paquete es el que está buscando su aplicación, el sistema operativo saca el hilo del estado suspendido y la lectura puede continuar. En otras palabras, su aplicación está de hecho acoplada al ámbito de las señales eléctricas a través del sistema operativo.

Charles E. Grant
fuente
¡Gracias! Este es un gran resumen. De hecho, he estado leyendo "Código" de Charles Petzold y acabo de llegar a la parte sobre las interrupciones. Todo esto tiene mucho más sentido ahora, y puedo ver cómo un dispositivo de red, una CPU y un sistema operativo podrían trabajar juntos para implementar una verdadera arquitectura de inserción.
John Cromartie
2

La arquitectura websocket es una arquitectura push, en realidad también lo es el intercambio y la perspectiva. Estos protocolos permanecen conectados al servidor en todo momento y el servidor envía mensajes (los empuja) cada vez que hay mensajes ...

Rotemmiz
fuente
1

También consideraría que los enchufes que Charles ya presentó son sin duda un diseño "push". Te acompañó desde el reino de las señales eléctricas, pero otro tema a considerar son los diseños "push" que son puramente decisiones de arquitectura de aplicación y suceden en capas de abstracción mucho más altas.

Los marcos de eventos típicos se considerarían push, ya que la fuente del evento activará eventos independientemente de quién los escuche o si el receptor de eventos puede mantenerse al día con esos eventos.

Otro ejemplo, que es el área donde trabajo, es la transmisión de video. Trabajamos con RTP (protocolo de transporte en tiempo real). Está basado en UDP / IP y, por naturaleza, es un protocolo push. El remitente seguirá enviando el video a la velocidad que elija sin importarle si el receptor lo sigue.

DXM
fuente
1

Claro que lo hay. Las aplicaciones de socket UDP en Unix, por ejemplo, pueden ser puramente push. El más conocido sería el clásico BSD Unix syslogd, que declara su disposición a aceptar paquetes entrantes ("enviados") y los procesa. No hay comunicación inversa a nivel de aplicación o protocolo (el "empujador" ni siquiera sabe si el paquete se recibió y procesó correctamente). En un nivel de API dentro de la aplicación receptora, puede haber mecanismos de recepción de sondeo, síncrono o devolución de llamada, los dos últimos de los cuales son puramente push.

Ross Patterson
fuente