PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Tại sao `libpq` lại sử dụng tính năng thăm dò thay vì thông báo để tìm nạp dữ liệu?

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Heroku Postgres:psql:FATAL:không có mục nhập pg_hba.conf cho máy chủ

  2. Sử dụng kết nối SSL PostgreSQL không gỉ với chứng chỉ tự ký

  3. Tổng hợp kết nối PostgreSQL:Phần 1 - Ưu và nhược điểm

  4. Kết hợp các câu lệnh INSERT trong một CTE sửa đổi dữ liệu với một biểu thức CASE

  5. Lỗi:phải là chủ sở hữu của cơ sở dữ liệu