PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Защо `libpq` използва анкета, а не известяване за извличане на данни?

В модела на изпълнение на еднонишкова програма, потокът на изпълнение не може да бъде прекъснат от данни, връщащи се от асинхронна заявка или по-общо мрежов сокет. Само сигнали (SIGTERM и приятели) може да прекъсне потока, но сигналите не могат да бъдат закачени към постъпващите данни.

Ето защо не е възможно да имате обратно извикване, за да получавате известия за входящи данни. Частта от код в libpq, която би била необходима за излъчване на обратното извикване, никога няма да се изпълни, ако вашият код не го извика. И ако трябва да го извикате, това обезсмисля целия смисъл на обратното извикване.

Има библиотеки като Qt които предоставят обратни извиквания, но те са архитектурирани от самото начало с основен цикъл, който действа като процесор за събития. Потребителският код е организиран в обратни извиквания и е възможна обработка на входящи данни въз основа на събития. Но в този случай библиотеката поема собствеността върху потока на изпълнение, което означава, че нейният основен цикъл анкетира източниците на данни. Това просто прехвърля отговорността към друга част от кода извън 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. Как да търсите в json поле, което съдържа масив от обекти с Eloquent

  2. Съставният ПЪРВИЧЕН КЛЮЧ налага ограничения NOT NULL върху участващите колони

  3. Изберете къде е първата буква в диапазон ( PostgreSQL )

  4. Стойността на масива на цели числа на PostgreSQL се присъединява към цяло число в друга таблица с низ за низ

  5. SQL заявка за получаване на всички стойности, които едно изброяване може да има