Trong mô hình thực thi của chương trình đơn luồng, luồng thực thi không thể bị gián đoạn bởi dữ liệu quay trở lại từ truy vấn không đồng bộ, hay nói chung là ổ cắm mạng. Chỉ tín hiệu (SIGTERM
và bạn bè) có thể làm gián đoạn luồng, nhưng không thể kết nối các tín hiệu với dữ liệu đến.
Đó là lý do tại sao việc gọi lại để nhận thông báo về dữ liệu đến là không thể thực hiện được. Đoạn mã trong libpq cần thiết để phát ra lệnh gọi lại sẽ không bao giờ chạy nếu mã của bạn không gọi nó. Và nếu bạn phải gọi nó, điều đó đánh bại toàn bộ điểm của một cuộc gọi lại.
Có các thư viện như Qt
cung cấp các lệnh gọi lại, nhưng chúng được kiến trúc từ đầu với một vòng lặp chính hoạt động như một bộ xử lý sự kiện. Mã người dùng được tổ chức trong các lệnh gọi lại và có thể xử lý dữ liệu đến dựa trên sự kiện. Nhưng trong trường hợp này, thư viện có quyền sở hữu luồng thực thi, nghĩa là mainloop của nó sẽ thăm dò các nguồn dữ liệu. Điều đó chỉ chuyển trách nhiệm sang một đoạn mã khác bên ngoài libpq.