sql >> Databáze >  >> RDS >> PostgreSQL

Proč `libpq` pro načítání dat používá dotazování místo upozornění?

V modelu provádění programu s jedním vláknem nemůže být tok provádění přerušen daty přicházejícími z asynchronního dotazu nebo obecněji síťového soketu. Pouze signály (SIGTERM a přátelé) mohou přerušit tok, ale signály nelze připojit k příchozím datům.

To je důvod, proč zpětné volání za účelem upozornění na příchozí data není možné. Část kódu v libpq, která by byla nezbytná k odeslání zpětného volání, by se nikdy nespustila, pokud by ji váš kód nevolal. A pokud to musíte zavolat, překazí to smysl zpětného volání.

Existují knihovny jako Qt které poskytují zpětná volání, ale jsou od základu postaveny s hlavní smyčkou, která funguje jako procesor událostí. Uživatelský kód je organizován ve zpětných voláních a je možné zpracování příchozích dat na základě událostí. Ale v tomto případě knihovna převezme vlastnictví toku provádění, což znamená, že její hlavní smyčka se dotazuje na zdroje dat. To jen přesouvá odpovědnost na jiný kus kódu mimo libpq.



  1. mysql insert only if not existuje nefunguje

  2. Srovnávací databáze 101 - část 1

  3. Nelze se přihlásit k serveru SQL pomocí ověřování systému Windows

  4. zkopírujte tabulky s daty do jiné databáze v SQL Server 2008