PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Dlaczego `libpq` używa odpytywania zamiast powiadamiania o pobieraniu danych?

W modelu wykonywania programu jednowątkowego przepływ wykonywania nie może zostać przerwany przez dane powracające z zapytania asynchronicznego lub ogólniej gniazda sieciowego. Tylko sygnały (SIGTERM i przyjaciółmi) mogą zakłócać przepływ, ale sygnały nie mogą być połączone z przychodzącymi danymi.

Dlatego nie jest możliwe wywołanie zwrotne w celu otrzymywania powiadomień o przychodzących danych. Fragment kodu w libpq, który byłby niezbędny do wyemitowania wywołania zwrotnego, nigdy nie uruchomiłby się, jeśli Twój kod go nie wywoła. A jeśli musisz to wywołać, to niweczy cały sens oddzwonienia.

Istnieją biblioteki takie jak Qt które zapewniają wywołania zwrotne, ale są zaprojektowane od podstaw z główną pętlą, która działa jako procesor zdarzeń. Kod użytkownika jest zorganizowany w wywołania zwrotne i możliwe jest przetwarzanie przychodzących danych w oparciu o zdarzenia. Ale w tym przypadku biblioteka przejmuje własność przepływu wykonywania, co oznacza, że ​​jej pętla główna odpytuje źródła danych. To po prostu przenosi odpowiedzialność na inny fragment kodu poza libpq.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę uzyskać odległość między dwoma punktami na Ziemi z PostGIS?

  2. Nie znaleziono odpowiedniego sterownika po dołączeniu potrzebnych sterowników do wtyczki maven-assembly-plugin

  3. Użyj wyzwalaczy w dziedziczonych tabelach, aby zastąpić klucze obce

  4. Ograniczenie PostgreSQL - tylko jeden wiersz może mieć ustawioną flagę

  5. Uproszczenie zapytania z LIMIT w podzapytaniu i klauzulami WHERE zduplikowanymi w podzapytaniu i zapytaniu zewnętrznym