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.