sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvorfor bruger `libpq` polling i stedet for notifikation til datahentning?

I eksekveringsmodellen af ​​et mono-threaded program, kan eksekveringsflowet ikke afbrydes af data, der kommer tilbage fra en asynkron forespørgsel, eller mere generelt en netværkssocket. Kun signaler (SIGTERM og venner) kan afbryde flowet, men signaler kan ikke kobles til data, der kommer ind.

Derfor er det ikke muligt at ringe tilbage for at få besked om indgående data. Det stykke kode i libpq, der ville være nødvendigt for at udsende tilbagekaldet, ville aldrig køre, hvis din kode ikke kalder det. Og hvis du er nødt til at ringe til det, besejrer det hele pointen med et tilbagekald.

Der er biblioteker som Qt der giver tilbagekald, men de er opbygget fra bunden med en hovedsløjfe, der fungerer som en hændelsesprocessor. Brugerkoden er organiseret i tilbagekald og hændelsesbaseret behandling af indgående data er mulig. Men i dette tilfælde overtager biblioteket ejerskab af eksekveringsflowet, hvilket betyder, at dets mainloop poller datakilderne. Det flytter bare ansvaret til et andet stykke kode uden for libpq.



  1. tilslutning af MATLAB 7.0 og MYSQL

  2. Start af en postgres SQL 9.6-server på Amazon Linux returnerer en ikke-genkendt tjeneste

  3. postgreSQL fejl initdb:kommando ikke fundet

  4. Indsætte i tabel ved hjælp af resultatsæt af dobbelt forespørgsel?