sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Por qué `libpq` usa encuestas en lugar de notificaciones para obtener datos?

En el modelo de ejecución de un programa monohilo, el flujo de ejecución no puede ser interrumpido por datos que regresan de una consulta asíncrona o, más generalmente, de un socket de red. Solo señales (SIGTERM y amigos) pueden interrumpir el flujo, pero las señales no se pueden conectar a los datos que ingresan.

Es por eso que no es posible recibir una devolución de llamada para recibir una notificación de los datos entrantes. El fragmento de código en libpq que sería necesario para emitir la devolución de llamada nunca se ejecutaría si su código no lo llama. Y si tiene que llamarlo, eso anula todo el sentido de una devolución de llamada.

Hay bibliotecas como Qt que proporcionan devoluciones de llamada, pero están diseñados desde cero con un bucle principal que actúa como un procesador de eventos. El código de usuario está organizado en devoluciones de llamada y es posible el procesamiento basado en eventos de los datos entrantes. Pero en este caso, la biblioteca se hace cargo del flujo de ejecución, lo que significa que su bucle principal sondea las fuentes de datos. Eso simplemente cambia la responsabilidad a otra pieza de código fuera de libpq.