pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
许多 JDBC 驱动的一个问题是,同一时刻只能 有一个线程使用一个 Connection —— 否则 一个线程可能在另一个线程接收结果时发送查询,这可能 造成严重的混乱。
PostgreSQL JDBC 驱动 是线程安全的。 因此,如果你的应用程序使用多个线程,你不必 担心用复杂的算法来确保同一时刻只有一个线程 使用数据库。
如果一个线程在另一个线程正在使用连接时尝试 使用它,它会等到另一个线程完成其 当前操作。如果该操作是一条常规的 SQL 语句,那么该操作由发送语句和 检索任何 ResultSet(完整地)组成。如果它 是一次 fast-path 调用(例如从一个大对象读取一个 块),那么它由发送和检索相应的数据 组成。
这对应用程序和 applet 来说没有问题,但对 servlet 可能造成 性能问题。如果你有多个线程执行 查询,那么除一个之外每个线程都会暂停。 为了解决这个问题,建议你创建一个连接池。 每当一个线程需要使用数据库时,它向一个管理器 类请求一个 Connection 对象。管理器 把一个空闲的连接交给该线程并把它标记为忙。如果没有 空闲连接可用,它就打开一个。一旦该线程 用完连接,就把它归还给管理器, 管理器随后可以关闭它或者把它加入池中。管理器 还会检查连接是否仍然存活,如果已经 死掉就把它从池中移除。连接池的缺点 是它增加了服务器的负载,因为每个 Connection 对象都会创建一个新会话。这 取决于你和你的应用程序的需求。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。