sql >> Database >  >> RDS >> PostgreSQL

Waarom gebruikt `libpq` polling in plaats van notificatie voor het ophalen van gegevens?

In het uitvoeringsmodel van een mono-threaded programma kan de uitvoeringsstroom niet worden onderbroken door gegevens die terugkomen van een asynchrone query, of meer in het algemeen een netwerksocket. Alleen signalen (SIGTERM en vrienden) kunnen de stroom onderbreken, maar signalen kunnen niet worden gekoppeld aan gegevens die binnenkomen.

Daarom is het niet mogelijk om teruggebeld te worden om een ​​melding te krijgen van inkomende gegevens. Het stukje code in libpq dat nodig zou zijn om de callback uit te zenden, zou nooit worden uitgevoerd als uw code het niet aanroept. En als je het moet bellen, verslaat dat het hele punt van terugbellen.

Er zijn bibliotheken zoals Qt die callbacks bieden, maar ze zijn van de grond af opgebouwd met een hoofdlus die fungeert als een gebeurtenisprocessor. De gebruikerscode is georganiseerd in callbacks en gebeurtenisgebaseerde verwerking van inkomende gegevens is mogelijk. Maar in dit geval wordt de bibliotheek eigenaar van de uitvoeringsstroom, wat betekent dat de hoofdlus de gegevensbronnen ondervraagt. Dat verschuift de verantwoordelijkheid alleen maar naar een ander stukje code buiten libpq.



  1. Mysql-resultaat krijgen van itemupdate

  2. Probleem bij het maken van externe sleutels in mySql

  3. Wat doet deze query om een ​​door komma's gescheiden lijst van SQL Server te maken?

  4. SQL, vragen over join