sql >> Databasteknik >  >> RDS >> PostgreSQL

Varför använder `libpq` polling snarare än avisering för datahämtning?

I exekveringsmodellen för ett monotrådat program kan exekveringsflödet inte avbrytas av data som kommer tillbaka från en asynkron fråga, eller mer allmänt ett nätverksuttag. Endast signaler (SIGTERM och vänner) kan avbryta flödet, men signaler kan inte kopplas till data som kommer in.

Det är därför det inte är möjligt att ringa tillbaka för att få meddelande om inkommande data. Kodbiten i libpq som skulle behövas för att sända återuppringningen skulle aldrig köras om din kod inte anropar den. Och om du måste ringa det, motverkar det hela poängen med en återuppringning.

Det finns bibliotek som Qt som ger återuppringningar, men de är uppbyggda från grunden med en huvudslinga som fungerar som en händelseprocessor. Användarkoden är organiserad i callbacks och händelsebaserad bearbetning av inkommande data är möjlig. Men i det här fallet tar biblioteket äganderätten till exekveringsflödet, vilket innebär att dess huvudslinga avsöker datakällorna. Det flyttar bara ansvaret till en annan kod utanför libpq.



  1. Oracle till PostgreSQL — Markörer och lträd

  2. Trigger som uppdaterar bara den infogade raden

  3. month() funktion och year() funktion i postgresql till jpa2

  4. Kan inte ansluta till localhost med Pythons MySQLdb