PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Mengapa `libpq` menggunakan polling daripada notifikasi untuk pengambilan data?

Dalam model eksekusi program mono-threaded, alur eksekusi tidak dapat diinterupsi oleh data yang kembali dari kueri asinkron, atau lebih umum dari soket jaringan. Hanya sinyal (SIGTERM dan teman-teman) dapat mengganggu aliran, tetapi sinyal tidak dapat dihubungkan ke data yang masuk.

Itu sebabnya panggilan balik untuk mendapatkan pemberitahuan tentang data yang masuk tidak dimungkinkan. Potongan kode di libpq yang diperlukan untuk memancarkan panggilan balik tidak akan pernah berjalan jika kode Anda tidak memanggilnya. Dan jika Anda harus memanggilnya, itu mengalahkan inti dari panggilan balik.

Ada perpustakaan seperti Qt yang menyediakan callback, tetapi diarsitektur dari bawah ke atas dengan loop utama yang bertindak sebagai pemroses peristiwa. Kode pengguna diatur dalam panggilan balik dan pemrosesan data masuk berbasis peristiwa dimungkinkan. Namun dalam kasus ini perpustakaan mengambil alih kepemilikan dari aliran eksekusi, yang berarti bahwa mainloop-nya melakukan polling terhadap sumber data. Itu hanya mengalihkan tanggung jawab ke bagian kode lain di luar 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. Cara mengkonfigurasi SELinux untuk PostgreSQL dan TimescaleDB

  2. Lewati beberapa set atau larik nilai ke suatu fungsi

  3. Mengotomatiskan Barman dengan Wayang:it2ndq/barman (bagian satu)

  4. Mengelompokkan beberapa bidang sql hasil menjadi objek umum

  5. Bagaimana cara membuat fungsi bersarang di PL/pgSQL?